Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlagen Gleitkommavergleiche in PHP manchmal fehl und wie kann ich sie beheben?
Vergleich von Floats in PHP
In PHP kann der Vergleich von Floats manchmal zu unerwartetem Verhalten führen. Betrachten Sie den folgenden Codeausschnitt:
$a = 0.17; $b = 1 - 0.83; // 0.17 if($a == $b ){ echo 'a and b are same'; } else { echo 'a and b are not same'; }
Überraschenderweise gibt dieser Code „a und b sind nicht gleich“ zurück, obwohl $a und $b gleich sein sollten.
Grund für die Diskrepanz
Diese Diskrepanz ergibt sich aus der Natur der Gleitkomma-Arithmetik. Gleitkommawerte stellen Zahlen in einem Binärformat dar, die nur echte numerische Werte annähern können. Daher können Operationen mit Gleitkommazahlen zu kleinen Fehlern führen, die genaue Vergleiche unmöglich machen.
Richtiger Ansatz
Um dieses Problem zu vermeiden, verwenden Sie einen Toleranzwert, wenn Floats vergleichen. Diese Toleranz stellt die maximal akzeptable Differenz zwischen zwei als gleich angesehenen Werten dar. Beispiel:
if (abs(($a - $b) / $b) < 0.00001) { echo 'a and b are same'; } else { echo 'a and b are not same'; }
Wenn in diesem Fall die absolute Differenz zwischen $a und $b dividiert durch $b weniger als 0,00001 beträgt, werden die Werte als gleich betrachtet. Passen Sie den Toleranzwert entsprechend der für Ihre Anwendung erforderlichen Präzision an.
Das obige ist der detaillierte Inhalt vonWarum schlagen Gleitkommavergleiche in PHP manchmal fehl und wie kann ich sie beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!