Heim >Backend-Entwicklung >PHP-Tutorial >Warum sind meine PHP-Float-Vergleiche ungenau?

Warum sind meine PHP-Float-Vergleiche ungenau?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-30 17:01:25961Durchsuche

Why Are My PHP Float Comparisons Inaccurate?

Genauigkeit der PHP-Gleitkommaberechnung: Präzisionsherausforderungen meistern

Bei der Arbeit mit Gleitkommaberechnungen in PHP stoßen Entwickler häufig auf Genauigkeitsprobleme. In diesem Artikel geht es um ein spezielles Problem, mit dem ein Benutzer konfrontiert war, der versuchte, zwei Gleitkommawerte mit einer Toleranz von 0,01 zu vergleichen, dabei aber auf unerwartete Ergebnisse stieß.

Um das Problem zu verstehen, schauen wir uns den bereitgestellten Code genauer an:

<code class="php">$fooValue = 100.68;
$cowValue = 100.67;

$diffValue = $fooValue - $cowValue;
if($diffValue <= 0.01) {
    echo("success");
} else {
    echo("error");
}</code>

In diesem Beispiel wird das Ergebnis als „Fehler“ ausgegeben, da Gleitkommaberechnungen in PHP aufgrund von Ungenauigkeiten in der Binärdarstellung nicht genau sind. Das bedeutet, dass, obwohl sich $fooValue und $cowValue mathematisch um 0,01 unterscheiden, ihre internen Binärdarstellungen diesen Wert möglicherweise nicht perfekt widerspiegeln.

Um diese Herausforderung zu meistern, bietet PHP alternative Lösungen:

  • BC Math: Die BC Math-Erweiterung bietet arithmetische Operationen mit beliebiger Genauigkeit. Sie können damit Berechnungen mit einem höheren Grad an Präzision als Gleitkomma-Arithmetik durchführen.
  • GMP-Bibliothek: Die GMP-Bibliothek bietet Unterstützung für leistungsstarke Ganzzahlarithmetik und kann zur Durchführung verwendet werden genaue Berechnungen mit ganzen Zahlen. Obwohl Gleitkommaoperationen nicht direkt unterstützt werden, können Sie manchmal von und in Ganzzahlen konvertieren, ohne an Präzision zu verlieren.

Das obige ist der detaillierte Inhalt vonWarum sind meine PHP-Float-Vergleiche ungenau?. 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