Funktion number_format() - Zahlen mit Punkt und Komma formatieren

Bei Berechnungen in PHP sind als Dezimaltrennzeichen Punkte vorgesehen und Tausender-Trennzeichen werden nicht verwendet. Die Darstellung von Zahlen ist auf der Welt jedoch nicht einheitlich. In Deutschland verwendet man gewöhnlich als Tausender-Trennzeichen einen Punkt und als Dezimaltrennzeichen ein Komma, z.B. schreibt man die Zahl 1000 in der Form 1.000,00. In den USA ist es genau umgekehrt und man schreibt die Zahl 1000 in der Form 1,000.00. In Frankreich wiederum ist die Schreibweise 1 000,00 geläufig und in manch anderen Ländern werden weitere Varianten verwendet.

Damit die Benutzer ihr gewohntes Zahlenformat angezeigt bekommen, müssen die Zahlen formatiert werden. Hierfür kann man die Funktion number_format() verwenden. Die Parameter werden wie folgt angegeben.

  1. Die zu formatierende Zahl (float).
  2. Die Anzahl der Nachkommastellen (decimals, optional).
  3. Das Dezimaltrennzeichen (dec_point, optional).
  4. Das Tausender-Trennzeichen (thousands_sep, optional).

Die drei letzten Parameter sind alle optional. Hierbei gibt es die Besonderheit, dass man entweder mit decimals nur einen oder alle drei der optionalen Parameter angeben kann, nicht jedoch zwei. Falls kein optionaler Parameter angegeben wird, wird die Zahl mit einem Komma als Tausender-Trennzeichen, jedoch ohne Trennzeichen für die Nachkommastellen formatiert. Hierbei kann es zu Auf- oder Abrundungen kommen. Beim folgenden Beispiel wird kein optionaler Parameter angegeben. Mit der Formatierung der Zahl 1999.99 erfolgt eine Rundung, sodass die Ausgabe 2,000 ist.

<?php

$zahl = 1999.99;

// Ausgabe 2,000
echo number_format($zahl);

?>

Falls die Zahl mit Nachkommastellen formatiert werden soll, kann man mit dem zweiten Parameter decimals einen Wert angeben. Im folgenden Beispiel wird die Zahl mit drei Nachkommastellen formatiert.

<?php

$zahl = 1999.99;

// Ausgabe 1,999.990
echo number_format($zahl, 3);

?>

Falls die Trennzeichen für die Nachkommastellen und für die Tausender-Stellen geändert werden sollen, kann man die weiteren Parameter dec_point und thousands_sep angeben. Im folgenden Beispiel wird die Zahl mit einem Komma als Dezimaltrennzeichen und Punkt als Tausender-Trennzeichen formatiert. Das entspricht der Darstellung von Zahlen in Deutschland.

<?php

$zahl = 1999.99;

// Ausgabe 1.999,990
echo number_format($zahl, 3, ',', '.');

?>

In Frankreich wird gewöhnlich ein Leerzeichen für die Tausender-Trennung und ein Komma als Dezimaltrennzeichen verwendet.

<?php

$zahl = 1999.99;

// Ausgabe 1 999,990
echo number_format($zahl, 3, ',', ' ');

?>

Falls die Regel nicht eingehalten wird, dass man kein, ein oder alle drei optionale Parameter angibt, erfolgt keine Formatierung der Zahl und die Funktion gibt nichts (NULL) zurück.

<?php

$zahl = 1999.99;

// Ausgabe
echo number_format($zahl, 3, ',');

?>

Der Rückgabewert ist vom Datentyp string und ist daher nicht unbedingt für weitere Berechnungen geeignet. Falls der Rückgabewert für weitere Berechnungen verwendet wird, versucht der PHP-Interpreter zwar den String als Zahl umzuwandeln. Die Umwandlung erfolgt jedoch in der Regel nicht korrekt. Im folgenden Beispiel wird der Rückgabewert in der Variable $a gespeichert. Danach erfolgt eine Berechnung damit sowie die Ausgabe des Ergebnisses.

<?php

$zahl = 1999.99;

// Rückgabewert in Variable $a speichern
$a = number_format($zahl);

// Ausgabe 502
echo 500 + $a;

?>

Das Ergebnis der Berechnung ist 502, da der String 2,000 als Zahl 2 interpretiert wird