1 Reaktion

PHP number_format() und die Rundung negativer Zahlen auf 0

Geschätzte Lesedauer:

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]

Dieser Artikel wurde von Marius Burkard verfasst.

Marius Burkard ist Diplom-Wirtschaftsinformatiker und arbeitet seit 2006 als selbstständiger Software-Entwickler und Linux-Server-Administrator mit der Firma pixcept KG. Er ist unter anderem mitverantwortlich für die Projekte Was-lese-ich.de und ISPProtect.

1 Kommentar - bis jetzt!

Eigenen Kommentar verfassen
  1. schrieb am :

    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

Und jetzt du! Deine Meinung?

Erforderliche Felder sind mit einem Asterisk (*) gekennzeichnet. Die E-Mail-Adresse wird nicht veröffentlicht.
  1. Nach Absenden des Kommentar-Formulars erfolgt eine Verarbeitung der von Ihnen eingegebenen personenbezogenen Daten durch den datenschutzrechtlich Verantwortlichen zum Zweck der Bearbeitung Ihrer Anfrage auf Grundlage Ihrer durch das Absenden des Formulars erteilten Einwilligung.
    Weitere Informationen