Mit PHP number_format() gestaltest du Zahlen lesbarer und passt sie exakt an die Bedürfnisse deiner Zielgruppe an.

Die Funktion number_format() in PHP dient dazu, Fließkommazahlen (oder ganze Zahlen) so aufzubereiten, dass sie für den Menschen leichter lesbar sind – zum Beispiel mit Tausenderpunkten, passender Dezimaltrennung und korrekter Rundung.
Typische Einsatzgebiete sind:
- Finanzdaten: Preise, Rechnungsbeträge, Kontostände
- Berichte und Auswertungen: Statistiken, große Mengen, Diagramm-Labels
- Web-Frontends: Zahlendarstellung für verschiedene Sprachen/Länder
Mit dieser Funktion passt du Zahlen exakt an das gewünschte Ausgabeschema an. So präsentierst du Werte übersichtlich, steigerst die Verständlichkeit für Nutzer und vermeidest Fehler durch uneinheitliche Trennzeichen.
Beispiel für verschiedene Ausgaben:
/** Zahl für den deutschen Markt */
echo number_format(12345.6789, 2, ',', '.');
/** Ausgabe: 12.345,68 */
/** Zahl für den englischsprachigen Raum */
echo number_format(12345.6789, 2, '.', ',');
/** Ausgabe: 12,345.68 */
2. Grundlegende Syntax und Parameter für die Verwendung
Mit passenden Parametern bereitest du Zahlen exakt so auf, wie es deine Anwendung erfordert, und präsentierst sie optimal für unterschiedliche Einsatzbereiche.
Funktionssignatur
string number_format(float $fZahl, int $iNachkommastellen = 0, string $sDezimaltrenner = ".", string $sTausendertrenner = ",")
Parameter-Erklärung (detailliert)
-
$fZahl (erforderlich)
Die zu formatierende Zahl (Datentyp: float oder int).
-
$iNachkommastellen (optional, Standard: 0)
Anzahl der Dezimalstellen.
- Seit PHP 8.3.0 werden negative Werte unterstützt (Rundung links vom Dezimalpunkt).
- Vor PHP 8.3.0 wurden negative Werte ignoriert.
-
$sDezimaltrenner (optional, Standard: “.”)
Zeichen, das für die Trennung zwischen Ganzzahl und Nachkommastellen verwendet wird.
-
$sTausendertrenner (optional, Standard: “,”)
Zeichen, das als Tausendertrennzeichen genutzt wird.
Hinweis: Es gibt keine Version mit drei Parametern!
(1, 2 oder 4 Parameter erlaubt – niemals 3!)
Die Funktion akzeptiert ausschließlich eine, zwei oder vier Angaben als Argumente. Du kannst entweder nur den Zahlenwert übergeben, zusätzlich die gewünschte Nachkommastellenanzahl festlegen oder mit vier Argumenten beide Trennzeichen – für Dezimalstellen und Tausendergruppen – gezielt bestimmen.
Schon mit minimaler Nutzung dieser Funktion erhältst du eine Ausgabe, bei der große Zahlen automatisch in übersichtliche Gruppen getrennt werden.
3.1. Basisanwendung (ohne Dezimalstellen oder Separatoren)
$fZahl = 12345.6789;
echo number_format($fZahl);
/** Ausgabe: 12,346 */
- Erklärung: Standardmäßig werden keine Dezimalstellen angezeigt und auf die nächste Ganzzahl gerundet.
3.2. Festlegen der Dezimalstellen
$fZahl = 12345.6789;
echo number_format($fZahl, 2);
/** Ausgabe: 12,345.68 */
- Rundung: Die Funktion rundet standardmäßig nach der “round half up”-Regel.
3.3. Benutzerdefinierte Trennzeichen (Internationalisierung)
Deutsches/Europäisches Format:
echo number_format(12345.6789, 2, ',', '.');
/** Ausgabe: 12.345,68 */
Französisches Format:
echo number_format(12345.6789, 2, ',', ' ');
/** Ausgabe: 12 345,68 */
3.4. Rundung mit negativen Dezimalstellen (PHP 8.3.0+)
echo number_format(1234.5678, -1);
/** Ausgabe: 1,230 */
3.5. Umgang mit großen Zahlen und Dezimalpräzision
$fGross = 9876543210.123456;
echo number_format($fGross, 4, ',', '.');
/** Ausgabe: 9.876.543.210,1235 */
- Einsatzgebiet: Wissenschaftliche, technische oder finanzielle Anwendungen, in denen viele Nachkommastellen und hohe Zahlenwerte korrekt dargestellt werden sollen.
4. Wichtige Hinweise und Fallstricke
Beachte, dass das Ergebnis zur Anzeige gedacht ist und nicht für Berechnungen verwendet werden sollte.
Rückgabewert ist ein String, keine Zahl!
- number_format() gibt immer einen String zurück.
- Das Ergebnis ist zur reinen Anzeige gedacht, nicht zur weiteren Berechnung!
$fBetrag = 999.95;
$sBetragFormatiert = number_format($fBetrag, 2, ',', '.'); /** "999,95" */
$iSumme = $sBetragFormatiert + 5;
/** Fehler! */
Best Practice: Immer erst rechnen, dann formatieren.
Rundungsverhalten
Umgang mit nicht-numerischen Eingaben
- Übergibst du einen String oder nicht-numerischen Wert, gibt PHP eine Warnung aus und gibt „0“ zurück.
echo number_format("abc");
/** Ausgabe: 0 */
Parameteranzahl
Die erlaubte Anzahl der Parameter beeinflusst direkt, wie flexibel und exakt du das Zahlenformat steuern kannst – ein falscher Aufruf mit drei Parametern verursacht dagegen einen Fehler.
Anzahl Parameter | Beschreibung | Beispiel |
1 | Zahl, Rundung auf Ganzzahl, Standard-Separatoren | number_format(1234.56) |
2 | Zahl, gewünschte Dezimalstellen, Standard-Separatoren | number_format(1234.56, 2) |
4 | Zahl, gewünschte Dezimalstellen, benutzerdefinierte Separatoren | number_format(1234.56, 2, ",", ".") |
3 | Ungültig! Führt zu einem Fehler | number_format(1234.56, 2, ",") // Fehler |
Du solltest diese Funktion nutzen, wenn du unkompliziert Zahlen für die Ausgabe anpassen möchtest und keine komplexen Lokalisierungsregeln benötigst.
- Du schnell Zahlen für die Anzeige formatiert brauchst
- Die gewünschte Formatierung einfach ist (Dezimalstellen, Trennzeichen)
- Du eine länderspezifische Formatierung willst, aber ohne Währungszeichen
Alternativen für komplexe Fälle
sprintf()
- Wenn du spezielle Formate brauchst, z.B. mit führenden Nullen:
echo sprintf("%09.2f", 123.4);
/** Ausgabe: 0000123.40 */
- Für echte Internationalisierung – z.B. unterschiedliche Gruppierungsregeln, automatische Währungs- oder Prozentzeichen:
$oFormatter = new NumberFormatter("de_DE", NumberFormatter::DECIMAL);
echo $oFormatter->format(1234567.89);
/** Ausgabe: 1.234.567,89 */
$oFormatterWaehrung = new NumberFormatter("de_DE", NumberFormatter::CURRENCY);
echo $oFormatterWaehrung->formatCurrency(1234567.89, "EUR");
/** Ausgabe: 1.234.567,89 € */
- Nicht mehr empfohlen! Funktioniert nicht auf Windows und wurde ab PHP 7.4 entfernt.
6. Häufig gestellte Fragen (FAQ)
Nachfolgend gehe ich auf häufig gestellte Fragen ein. Mit den passenden Funktionen umgehst du typische Stolperfallen, wenn du die Besonderheiten der Zahlenformatierung im Blick behalten möchtest.
Wie runde ich eine Zahl in PHP richtig?
Verwende round() für mathematische Rundung, number_format() für die Ausgabe.
Wie entferne ich Tausendertrennzeichen, um einen String zu berechnen?
Mit str_replace() kannst du Trennzeichen entfernen:
$sZahl = "12.345,67";
$fWert = (float)str_replace(['.', ','], ['', '.'], $sZahl);
/** 12345.67 */
Warum erhalte ich eine falsche Summe nach number_format()?
Weil das Ergebnis ein String ist, nicht für Berechnungen! Rechne mit den Originalwerten.
Kann ich number_format() für Währungen verwenden?
Ja, aber ohne Währungssymbol. Für echtes Währungsformat lieber NumberFormatter nutzen.
7. Fazit
number_format() ist ein vielseitiges Werkzeug, um Zahlen sauber, benutzerfreundlich und für internationale Zielgruppen korrekt darzustellen.
Es eignet sich perfekt für Preisangaben, Berichte und Statistiken, sofern kein Symbol und keine komplexen Ländereinstellungen erforderlich sind. Beachte immer: Die Funktion dient nur der Anzeige – Rechnungen und Logik immer mit echten Zahlen (float/int) durchführen!
Meine Empfehlung: Nutze number_format() gezielt am Ende deines Berechnungsprozesses, wähle passende Trennzeichen und prüfe bei internationalen Projekten, ob du nicht gleich die intl-Erweiterung (NumberFormatter) einsetzen solltest. So bietest du Nutzern weltweit eine fehlerfreie und verständliche Darstellung deiner Daten.