PHP-Code funktioniert nicht richtig

Alles, was PHP betrifft, kann hier besprochen werden.

PHP-Code funktioniert nicht richtig

Postby Volti-115 » 21. December 2005 10:02

Hallo, zusammen,
mein Webserver spinnt sich komische Zahlen zusammen, die rein logisch völlig unmöglich sind. hier das Beispiel:

Code: Select all
for ((float)$i = 0.00; $i <20; $i+=0.01)
echo $i."<br>";


das Ergebnis bei mir:
Mozilla Firefox wrote:0
0.01
0.02
...

...
4.42
4.43
4.4399999999999
4.4499999999999
4.4599999999999
4.4699999999999
4.4799999999999
...

strange things happen - sometimes

mein Xampp ist die 1.4.6-er Version
Liegt das an der Version, oder ist das PHP da kaputt?

Edit: ohne das explizite cast in Float genau dasselbe

Edit: PHP-Version ist 5.0.1
Volti-115
 
Posts: 1
Joined: 21. December 2005 09:38

Postby Wiedmann » 21. December 2005 11:17

Liegt das an der Version, oder ist das PHP da kaputt?

Weder noch. Bei Floats kann das schonmal vorkommen. Bei mir und PHP5.1.x tritt das jetzt aber nicht auf mit deinem Beispiel.

Floating point values have a limited precision. Hence a value might
not have the same string representation after any processing. That also
includes writing a floating point value in your script and directly
printing it without any mathematical operations.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby KingCrunch » 21. December 2005 13:47

Auszug aus dem PHP-Manual:
Es ist ziemlich normal, dass einfache Dezimalzahlen wie 0.1 oder 0.7 nicht in ihre internen binären Entsprechungen konvertiert werden können, ohne einen kleinen Teil ihrer Genauigkeit zu verlieren. Das kann zu verwirrenden Ergebnissen führen. So wird floor((0.1 + 0.7) * 10) normalerweise 7 statt des erwarteten Wertes 8 zurück geben (als Ergebnis der internen Entsprechung von 7.9999999999...).

Das gründet sich auf die Tatsache, dass es unmöglich ist, manche Dezimal-Zahlen durch eine endliche Anzahl an Nachkomma-Stellen darzustellen. Dem Wert 1/3 entspricht z.B. der interne Wert von 0.3333333.
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25


Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests