Matti Mäkitalo: Einfache Rechnung in PHP wird als Falsch ausgegeben?!

Beitrag lesen

Hi,

Ich habe den Fehler derweil gefunden, ich weiß zwar nicht wie er zustande kamm, aber ein einfaches stripslashes() hat mein Problem gelöst.

Bei den Werten, die aus dem DBMS kommen? Dann hast du beim Eintragen was falsch gemacht. Zudem wüsste ich nicht, was bei 2.45 ein Slash zu tun hätte.

eine (zugegebenermaßen) wilde Vermutung meinerseits:
aus der Datenbank kommt nicht 2.45, sondern dies ist die gerundete Version nach der Ausgabe als String.

Dann würde folgendes passieren: beim Vergleich hat man z.B. (Werte ausgedacht) 2.45000000001 und 2.45, welche ungleich sind. Bei der Ausgabe (insb. durch die implizite Stringkonvertierung) wird nicht 2.4500000000001, sondern nur 2.45 ausgegeben (Rundung).

Daher wäre dein Hinweis, mit var_dump die Variable auszugeben, sinnvoll.

stripslashes arbeitet mit Strings und nicht mit floats und könnte diese Rundung ebenfalls implizit durchführen.

Beispiel:

  
$var = 2.45000000000001;  
$var1 = 2.45;  
  
if ($var == $var1) {  
	echo "$var==$var1 RICHTIG\n";  
} else {  
	echo "$var==$var1 FALSCH\n";  
}  
  
$var = stripslashes($var);  
if ($var == $var1) {  
	echo "$var==$var1 RICHTIG\n";  
} else {  
	echo "$var==$var1 FALSCH\n";  
}  

Bis die Tage,
Matti