PHP Fehler bei einfachen Berechnungen

pp3345

Lieutenant
Registriert
Feb. 2008
Beiträge
637
Ich hab grad ein echt dummes Problem... Vielleicht ist es auch einfach schon zu spät aber bei einfachen Berechnungen wie 10.74*2 erhalte ich in PHP plötzlich irgendwelche Zahlen mit zig Nachkommastellen. Precision steht in der php.ini auf 49, wenn ich es auf 12(Standard) stelle, verschwinden zwar einige Nachkommastellen natürlich, aber bei etwas anderen Rechnungen kommen dann wieder irgendwelche Nackommastellen.

Bei folgendem Code:

PHP:
<?php 
echo 10.74*2;
?>

erhalte ich das:

Output schrieb:
21.48000000000000042632564145606011152267456054688
:freaky:

Eigentlich ergibt 10.74*2 aber ja 21.48.
 
Das ist eine limitierung von Fließkommazahlen, die an deren repräsentation liegt. Kannst du wohl nichts dran
machen.
 
Dein Computer rechnet mit Zahlen zur Basis 2. Hier lassen sich nicht alle Dezimalzahlen exakt darstellen, woraus dann solle 'Rechenfehler' resultieren.
 
Hmm, verstehe. Irgendwie sowas hab ich mir schon gedacht. Ich muss jetzt allerdings Rechnungen erstellen und dabei verschiedene Gebühren addieren. Wenn ich jetzt aber eben mehrere Gebühren mit Nachkommastellen addiere, kommen wieder solche Zahlen rauß. Gibt es nichts, was ich dagegen tun könnte? Ist ja nicht gerade optimal...
 
Runden z.B.

mfg
 
Hab ich schon probiert. Funktioniert nicht ganz so, wie erhofft(entweder keine Nachkommastellen oder wiederrum ganz viele nur mit anderen Werten)
 
@der_guru: Ne, nicht wirklich.

Habs jetzt so gelöst, dass precision für das Script auf 12 gesetzt wird und die einzelnen Zahlen mit Hilfe von explode, strlen usw. auf max. 2 Nachkommastellen gekürzt werden.
 
Ja, OK, aber wie auch immer ich precision einstelle, ich krieg immer irgendwie abweichend Werte vom selbst ausgerechneten Gesamtbetrag(im einstelligen Centbereich).

Edit: Ahhh, danke, number_format hat mir geholfen. Vielen Dank
 
Zuletzt bearbeitet:
Eine Möglichkeit ist, alles mit Cent-Werten zu berechnen. Und das Ergebnis dann in Euro um zurechnen.
Und solange man keine Division durchführt, hat man auch das richtige Ergebnis.
 
Ja das ist eine Variante wie man das auch lösen könnte, würde aber bedeuten das, sofern Daten bereits in der Datenbank vorhanden sind, diese vorher umgewandelt werden.

Noch ein Tipp. Google mal nach einem Howto zum richtigen Rechnen mit Divisen, Beträgen.
Ich denke da gibts irgendwo eine Anleitung.

mfg
 
Zurück
Oben