PHP number_format() und die Rundung negativer Zahlen auf 0
Bekanntermaßen rundet auch die PHP Funktion number_format() die übergebenen Zahlen auf die gewünschte Anzahl Kommastellen.
[pastacode lang=“php“ message=“PHP“ highlight=““ provider=“manual“]
$a = 2.658;
$x = number_format($a, 2, ',', '.'); // --> 2,66
$x = number_format($a, 0, ',', '.'); // --> 3
[/pastacode]
Ein meiner Meinung nach unschöner Effekt für die Ausgabe ergibt sich bei Zahlen, die gerundet 0 ergeben sollten, wenn diese negativ sind.
[pastacode lang=“php“ message=“PHP“ highlight=““ provider=“manual“]
$a = -0.00000003;
$x = number_format($a, 2, ',', '.'); // --> -0.00
$x = number_format($a, 0, ',', '.'); // --> -0
[/pastacode]
Besonders ärgerlich ist dies, wenn es durch die internen Beschränkungen der Genauigkeit bei Fließkommazahlen beim Rechnen entsteht.
[pastacode lang=“php“ message=“PHP“ highlight=““ provider=“manual“]
$a = 7.8;
$b = 7.79;
$c = 0.01;
$ergebnis = $a - $b - c;
$x = number_format($ergebnis, 2, ',', '.'); // --> -0.00
[/pastacode]
Die -0.00 entstehen hier, da das Ergebnis durch die oben genannten Ungenauigkeiten -0.00000000000000021337 ergibt.
Dieses Ergebnis hängt allerdings auch von der PHP Version und der gewählten Einstellung in PHP zur Fließkommagenauigkeit ab.
Im Test habe ich PHP 5.3 mit einer Genauigkeit von 13 Stellen verwendet.
Das Verhalten von number_format() kann man elegant umgehen, indem man die Zahl schon vorher mit der Funktion round() auf die gewünschte Anzahl Nachkommastellen rundet.
[pastacode lang=“php“ message=“PHP“ highlight=““ provider=“manual“]
$a = -0.00000003;
$x = number_format(round($a, 2), 2, ',', '.'); // --> 0.00
$x = number_format(round($a, 0), 0, ',', '.'); // --> 0
[/pastacode]
schöner Artikel, gerade für Fortgeschrittene, habe bisher nie über diese Methode nachgedacht, da ich number_format() meist mit Währungszahlen benutze und selten eine Rundung und negative Zahlen benutze.
Grüße
PhpWebFox