Umgang mit Float-Vergleichen in PHP
Float-Vergleiche in PHP können aufgrund der Einschränkungen der Gleitkomma-Arithmetik zu unerwarteten Ergebnissen führen.
Probleminstanz
Beachten Sie den folgenden Code Ausschnitt:
$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'; }
In diesem Code stellen $a und $b denselben numerischen Wert (0,17) dar, aber der Vergleich mit == gibt das Ergebnis der else-Bedingung zurück.
Lösung
Der Vergleich von Gleitkommazahlen auf Gleichheit mithilfe eines strikten Vergleichs (==) ist aufgrund der Gleitkommazahl nicht zuverlässig Ungenauigkeit. Um dieses Problem zu beheben, sollten Sie für den Vergleich die Verwendung eines akzeptablen Differenzschwellenwerts in Betracht ziehen. Zum Beispiel:
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; }
In diesem Code nimmt die Funktion abs() die absolute Differenz zwischen $a und $b und dividiert dann das Ergebnis durch $b. Der Vergleich erfolgt anhand eines kleinen Schwellenwerts, um die Ungenauigkeit von Gleitkommazahlen zu berücksichtigen.
Vorbehalt
Dieser Ansatz bietet zwar eine vernünftige Lösung für den Gleichheitsvergleich von Gleitkommazahlen, ist es aber auch Beachten Sie unbedingt, dass Gleitkommawerte von Natur aus ungenau sind und eine exakte Gleichheit möglicherweise nicht immer genau dargestellt wird.
Das obige ist der detaillierte Inhalt vonWarum funktioniert der direkte Float-Vergleich in PHP nicht und wie können wir sie zuverlässig vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!