Heim > Backend-Entwicklung > PHP-Tutorial > Warum funktioniert der direkte Float-Vergleich in PHP nicht und wie können wir sie zuverlässig vergleichen?

Warum funktioniert der direkte Float-Vergleich in PHP nicht und wie können wir sie zuverlässig vergleichen?

DDD
Freigeben: 2025-01-03 14:27:40
Original
907 Leute haben es durchsucht

Why Doesn't Direct Float Comparison Work in PHP, and How Can We Compare Them Reliably?

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';
}
Nach dem Login kopieren

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";
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage