Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP number_format() - Zahlen professionell formatieren

Sie befinden sich: Home > Php Tutorial > PHP number_format():...

PHP number_format(): Zahlen clever und sicher formatieren


Eintrag am:  21.05.2025
Hits / Besucher:  680
Sprache:  Deutsch
Kategorie:  Fortgeschrittene...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Mit number_format() gestaltest du Zahlen lesbarer und passt sie exakt an die Bedürfnisse deiner Zielgruppe an. Ob Preisangaben mit Komma und Tausenderpunkt für den deutschen Markt oder Dezimalpunkt für englischsprachige Nutzer: Die Funktion übernimmt die Formatierung zuverlässig.

Modernes Titelbild mit PHP-Logo und Zahlenfeld. Im Fokus stehen formatierte Werte wie 1.234,56, 12,345.68 und 9 876,54, verschiedene Tausender- und Dezimaltrennzeichen farbig hervorgehoben. Klarer, technischer Stil in Blau-, Grau- und Türkistönen, dazu der Text: PHP number_format(): Zahlen formatieren leicht gemacht.

In diesem Tutorial lernst du die Syntax und alle Parameter kennen, siehst praxisnahe Beispiele von der Basisanwendung bis zum Warenkorb und erfährst, welche Fallstricke du vermeiden musst.

Was ist number_format() und warum ist es wichtig?

Die Funktion number_format() bereitet Fließkommazahlen und ganze Zahlen so auf, dass sie für Menschen leichter lesbar sind. Sie fügt Tausenderpunkte ein, setzt das passende Dezimaltrennzeichen und rundet auf die gewünschte Stellenzahl.

Typische Einsatzgebiete sind Preise und Rechnungsbeträge, Statistiken in Berichten und Diagramm-Labels sowie Zahlendarstellungen für verschiedene Sprachen und Länder. Mit dieser Funktion präsentierst du Werte übersichtlich und vermeidest Verwirrung durch uneinheitliche Trennzeichen.

<?php

/* Deutsches Format: Komma als Dezimal, Punkt als Tausender */
echo number_format(12345.6789, 2, ',', '.');
// Ausgabe: 12.345,68

/* Englisches Format: Punkt als Dezimal, Komma als Tausender */
echo number_format(12345.6789, 2, '.', ',');
// Ausgabe: 12,345.68
?>

Syntax und Parameter

Die Funktionssignatur von number_format() sieht so aus:

string number_format(

float $num,
int $decimals = 0,
string $decimal_separator = ".",
string $thousands_separator = ","
)

Parameter im Detail

Der erste Parameter $num ist die zu formatierende Zahl (float oder int). Der zweite Parameter $decimals legt die Anzahl der Nachkommastellen fest. Seit PHP 8.3 werden auch negative Werte unterstützt, die links vom Dezimalpunkt runden. Der dritte Parameter $decimal_separator bestimmt das Zeichen zwischen Ganzzahl und Nachkommastellen. Der vierte Parameter $thousands_separator definiert das Tausendertrennzeichen.

Wichtig: Die Funktion akzeptiert ausschließlich eine, zwei oder vier Argumente. Ein Aufruf mit drei Parametern führt zu einem Fehler.

Anwendungsbeispiele in der Praxis

Die folgenden Beispiele zeigen die wichtigsten Varianten von number_format().

Basisanwendung ohne Dezimalstellen

<?php

$zahl = 12345.6789;
echo number_format($zahl);
// Ausgabe: 12,346
?>

Ohne zweiten Parameter rundet number_format() auf die nächste Ganzzahl und setzt ein Komma als Tausendertrenner (englischer Standard).

Dezimalstellen festlegen

<?php

$zahl = 12345.6789;
echo number_format($zahl, 2);
// Ausgabe: 12,345.68
?>

Die Funktion rundet standardmäßig nach der Regel „round half up“. Für andere Rundungsarten kannst du die Zahl vorher mit round() behandeln.

Internationale Formate

Deutsches Format (Komma als Dezimal, Punkt als Tausender):

<?php

echo number_format(12345.6789, 2, ',', '.');
// Ausgabe: 12.345,68
?>

Französisches Format (Komma als Dezimal, Leerzeichen als Tausender):

<?php

echo number_format(12345.6789, 2, ',', ' ');
// Ausgabe: 12 345,68
?>

Rundung mit negativen Dezimalstellen (PHP 8.3+)

Seit PHP 8.3 akzeptiert number_format() negative Werte für $decimals. Damit rundest du links vom Dezimalpunkt:

<?php

echo number_format(1234.5678, -1);
// Ausgabe: 1,230 (auf Zehner gerundet)

echo number_format(1234.5678, -2);
// Ausgabe: 1,200 (auf Hunderter gerundet)
?>

Vor PHP 8.3 wurden negative Werte für den Dezimalstellen-Parameter stillschweigend ignoriert.

Praxisbeispiel: Warenkorb berechnen und formatieren

Der häufigste Anwendungsfall in der Praxis: Mehrere Positionen aufsummieren, Steuer berechnen und das Ergebnis formatiert ausgeben. Die wichtigste Regel dabei lautet: Erst mit den Rohwerten (float) rechnen, dann ganz am Ende formatieren.

<?php

$warenkorb = [
['name' => 'T-Shirt', 'preis' => 19.99, 'menge' => 2],
['name' => 'Jeans', 'preis' => 49.95, 'menge' => 1],
['name' => 'Sneaker', 'preis' => 79.90, 'menge' => 1],
];

$netto = 0;
foreach ($warenkorb as $pos) {
$netto += $pos['preis'] * $pos['menge'];
}

$mwst = $netto * 0.19;
$brutto = $netto + $mwst;

echo 'Netto: ' . number_format($netto, 2, ',', '.') . " €\n";
echo 'MwSt: ' . number_format($mwst, 2, ',', '.') . " €\n";
echo 'Brutto: ' . number_format($brutto, 2, ',', '.') . " €\n";
/* Netto: 169,83 €
MwSt: 32,27 €
Brutto: 202,10 € */
?>

Datenbank-Werte formatieren

Wenn du Preise aus einer MySQL-Datenbank liest (DECIMAL-Spalten), kommen die Werte als String an. Ein expliziter Cast auf (float) stellt sicher, dass number_format() korrekt arbeitet:

<?php

$stmt = $pdo->query('SELECT preis FROM produkte');
while ($row = $stmt->fetch()) {
$preis = (float)$row['preis'];
echo number_format($preis, 2, ',', '.') . " €\n";
}
?>

Formular-Eingaben zurückkonvertieren

Benutzer geben Zahlen oft im deutschen Format ein, zum Beispiel „1.234,56“. Bevor du damit rechnen kannst, musst du die Trennzeichen entfernen und den Dezimalpunkt setzen:

<?php

$eingabe = $_POST['betrag'] ?? '';

/* Punkt (Tausender) entfernen, Komma durch Punkt ersetzen */
$bereinigt = str_replace('.', '', $eingabe);
$bereinigt = str_replace(',', '.', $bereinigt);

/* In float umwandeln und validieren */
$betrag = filter_var($bereinigt, FILTER_VALIDATE_FLOAT);

if ($betrag === false) {
echo 'Ungültige Eingabe!';
} else {
$ergebnis = $betrag * 1.19;
echo number_format($ergebnis, 2, ',', '.') . ' €';
}
?>

Wichtige Hinweise und Fallstricke

Einige Eigenheiten von number_format() führen regelmäßig zu Fehlern. Wer sie kennt, vermeidet unnötige Debugging-Stunden.

Rückgabewert ist ein String

number_format() gibt immer einen String zurück. Das Ergebnis ist zur Anzeige gedacht und darf nicht für weitere Berechnungen verwendet werden:

<?php

$betrag = 999.95;
$formatiert = number_format($betrag, 2, ',', '.');
/* $formatiert ist "999,95" (String!) */

$summe = $formatiert + 5;
/* Warnung! PHP wandelt "999,95" in 999 um */
?>

Regel: Immer erst mit den Rohwerten rechnen, dann ganz am Ende formatieren.

Rundungsverhalten

Die Funktion verwendet die Standard-PHP-Rundung (round half up). Wenn du andere Rundungsmodi brauchst, runde die Zahl vorher mit round() und übergib das Ergebnis an number_format(). Zum reinen Auf- oder Abrunden stehen ceil() und floor() zur Verfügung.

Parameteranzahl: 1, 2 oder 4

Die Funktion akzeptiert nur einen, zwei oder vier Parameter. Ein Aufruf mit drei Parametern führt zu einem Fehler:

Anzahl Beschreibung Beispiel
1 Nur die Zahl, Rundung auf Ganzzahl number_format(1234.56)
2 Zahl + Dezimalstellen number_format(1234.56, 2)
4 Zahl + Dezimalstellen + beide Trennzeichen number_format(1234.56, 2, ",", ".")
3 Ungültig! Erzeugt einen Fehler number_format(1234.56, 2, ",")

Float-Präzision: Der Klassiker bei Preisberechnungen

Fließkommazahlen können in PHP nicht alle Dezimalwerte exakt darstellen. Das führt zu überraschenden Ergebnissen:

<?php

$summe = 0.1 + 0.2;
echo $summe;
// Ausgabe: 0.30000000000000004

echo number_format($summe, 1);
// Ausgabe: 0.3 (hier korrekt gerundet)
?>

Bei vielen aufeinanderfolgenden Berechnungen können sich die winzigen Abweichungen aufsummieren. Für Finanzanwendungen gibt es zwei bewährte Lösungen: Entweder rechnest du durchgehend in Cent (Integer-Arithmetik) oder du verwendest die BCMath-Erweiterung für exakte Dezimalrechnung:

<?php

/* Lösung 1: Integer-Cent-Rechnung */
$preisInCent = 1999; // 19,99 €
$menge = 3;
$summeInCent = $preisInCent * $menge;
echo number_format($summeInCent / 100, 2, ',', '.') . ' €';
// Ausgabe: 59,97 €

/* Lösung 2: BCMath */
$ergebnis = bcadd('0.1', '0.2', 2);
echo $ergebnis; // 0.30 (exakt)
?>

Nicht-numerische Eingaben

Übergibst du einen String oder nicht-numerischen Wert, gibt PHP eine Warnung aus und liefert „0“ zurück:

<?php

echo number_format("abc");
// Warnung + Ausgabe: 0
?>

Troubleshooting: Häufige Fehler lösen

Die folgenden Probleme tauchen in der Praxis immer wieder auf.

Zahl zeigt 0 an

Wenn number_format() nur „0“ ausgibt, ist die Eingabe vermutlich kein gültiger numerischer Wert. Prüfe den Datentyp mit var_dump() und stelle sicher, dass keine unsichtbaren Zeichen im String stecken.

Falsche Summe nach Formatierung

Wenn du mit dem formatierten String weiterrechnest, interpretiert PHP den Tausenderpunkt als Dezimaltrenner oder schneidet beim Komma ab. Lösung: Speichere den Rohwert (float) separat und formatiere erst bei der Ausgabe.

Komma statt Punkt aus Formulareingabe

Deutsche Benutzer geben „12,50“ statt „12.50“ ein. Konvertiere den Input vor der Berechnung mit str_replace(',', '.', $eingabe) und validiere anschließend mit filter_var().

NumberFormatter wirft einen Fatal Error

Die Klasse NumberFormatter benötigt die intl-Erweiterung. Prüfe mit extension_loaded('intl'), ob sie verfügbar ist. Auf vielen Shared-Hosting-Systemen ist sie nicht aktiv.

Alternativen zu number_format()

Je nach Anforderung gibt es bessere Werkzeuge als number_format().

sprintf() für spezielle Formate

Wenn du führende Nullen, feste Breiten oder spezielle Formatierungen brauchst, ist sprintf() die bessere Wahl:

<?php

echo sprintf("%09.2f", 123.4);
// Ausgabe: 000123.40
?>

NumberFormatter (intl-Erweiterung)

Für echte Internationalisierung mit automatischer Locale-Erkennung, Währungszeichen und länderspezifischen Gruppierungsregeln ist NumberFormatter die professionelle Lösung. Beachte, dass die intl-Erweiterung installiert und aktiviert sein muss:

<?php

if (extension_loaded('intl')) {
$fmt = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
echo $fmt->formatCurrency(1234567.89, 'EUR');
// Ausgabe: 1.234.567,89 €
} else {
/* Fallback ohne intl-Erweiterung */
echo number_format(1234567.89, 2, ',', '.') . ' €';
}
?>

money_format() (veraltet)

Diese Funktion wurde in PHP 7.4 als veraltet markiert und in PHP 8.0 entfernt. Verwende stattdessen NumberFormatter oder number_format() mit manuell angehängtem Währungszeichen.

Vergleich auf einen Blick

Funktion Locale Währung Verfügbarkeit Ideal für
number_format() Manuell Nein Immer Einfache Formatierung
sprintf() Nein Nein Immer Führende Nullen, feste Breiten
NumberFormatter Automatisch Ja intl-Erweiterung Internationale Projekte

Häufig gestellte Fragen

Hier findest du Antworten auf die gängigsten Fragen rund um number_format().

Wie runde ich eine Zahl in PHP richtig?

Verwende round() für die mathematische Rundung und number_format() für die formatierte Ausgabe. Rechne immer mit den Rohwerten und formatiere erst am Ende.

Wie entferne ich Tausendertrennzeichen, um mit einem String zu rechnen?

Entferne Trennzeichen mit str_replace() und wandle das Ergebnis in einen Float um:

<?php

$sZahl = "12.345,67";
$fWert = (float)str_replace(
['.', ','],
['', '.'],
$sZahl
);
// $fWert = 12345.67
?>

Warum erhalte ich eine falsche Summe nach number_format()?

Weil das Ergebnis ein String ist. PHP wandelt „12.345,67“ in die Zahl 12.345 um (stoppt beim Komma). Rechne immer mit den Original-Floatwerten.

Kann ich number_format() für Währungen verwenden?

Ja, aber ohne automatisches Währungssymbol. Du musst das Zeichen manuell anhängen. Für professionelle Währungsformatierung mit korrekter Platzierung des Symbols ist NumberFormatter die bessere Wahl.

Wie runde ich auf 5 Cent genau?

Kombiniere round() mit einem Faktor:

<?php

$betrag = 12.43;
$gerundet = round($betrag * 20) / 20;
echo number_format($gerundet, 2, ',', '.');
// Ausgabe: 12,45
?>

Fazit

number_format() ist das Standardwerkzeug in PHP, um Zahlen sauber und leserfreundlich darzustellen. Für die meisten Anwendungsfälle reicht die Funktion völlig aus. Denke immer daran, erst mit den Rohwerten zu rechnen und die Formatierung als allerletzten Schritt durchzuführen. Bei internationalen Projekten mit automatischer Locale-Erkennung und Währungszeichen lohnt sich der Umstieg auf NumberFormatter.

 


Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.