Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlagen Gleitkommavergleiche in PHP manchmal fehl und wie kann ich sie beheben?

Warum schlagen Gleitkommavergleiche in PHP manchmal fehl und wie kann ich sie beheben?

Susan Sarandon
Susan SarandonOriginal
2024-12-17 12:18:25422Durchsuche

Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can I Fix Them?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn