Heim >Backend-Entwicklung >PHP-Problem >PHP-Gleitkomma-Subtraktion ist ungleich 0

PHP-Gleitkomma-Subtraktion ist ungleich 0

angryTom
angryTomOriginal
2019-10-26 17:42:203590Durchsuche

PHP-Gleitkomma-Subtraktion ist ungleich 0

PHP-Gleitkomma-Subtraktion ist nicht gleich 0

PHP-Gleitkomma-Subtraktion ist nicht gleich 0, weil die Computer Wenn Dezimalzahlen in Binärzahlen umgewandelt werden, geht die Präzision verloren, sodass die Funktion bcadd() zum Addieren und Subtrahieren von Gleitkommazahlen und zur Durchführung einer Präzisionsumwandlung verwendet werden kann.

Um zu bestimmen, ob eine Gleitkommazahl gleich 0 ist, verwenden wir nicht $num == 0, sondern abs($d) < Dieses EPS ein sehr kleiner Wert.

Da es sich um Gleitkommadaten handelt, ist ein Teil ihrer Genauigkeit verloren gegangen und sie können nicht vollständig genau sein. Vertrauen Sie also niemals darauf, dass das Ergebnis einer Gleitkommazahl bis zur letzten Ziffer genau ist, und vergleichen Sie niemals zwei Gleitkommazahlen auf Gleichheit. Es ist zu beachten, dass dies kein Problem mit PHP ist, sondern ein Problem mit der computerinternen Verarbeitung von Gleitkommazahlen! Das gleiche Problem tritt in Sprachen wie C und JAVA auf.

Ein Beispiel für eine Gleitkommaberechnung lautet wie folgt:

$a = 0.2+0.7;
$b = 0.9;
var_dump($a == $b);

Das gedruckte Ergebnis ist: bool(false). Mit anderen Worten, das Berechnungsergebnis von 0,2 + 0,7 entspricht hier nicht 0,9, was offensichtlich unserem gesunden Menschenverstand widerspricht.

Zu diesem Problem hieß es im offiziellen PHP-Handbuch einmal: Offenbar kann ein einfacher Dezimalbruch wie 0,2 nicht in ein internes Binärformat konvertiert werden, ohne ein wenig an Präzision zu verlieren. Dies hat damit zu tun, dass es unmöglich ist, bestimmte Dezimalbrüche exakt mit einer endlichen Anzahl von Stellen auszudrücken. Beispielsweise wird 1/3 im Dezimalformat zu 0,3333333….

Um also zwei Gleitkommazahlen zu vergleichen, müssen wir sie vor dem Vergleich innerhalb des Genauigkeitsbereichs kontrollieren, den wir benötigen. Verwenden Sie daher die Funktion bcadd(), um die Gleitkommazahlen zu addieren und die Genauigkeit (in eine Zeichenfolge) umzuwandeln. :

var_dump(bcadd(0.2,0.7,1) == 0.9); // 输出:bool(true)

Für mehr PHP-bezogenes Wissen besuchen Sie bitte die

PHP-Chinese-Website!

Das obige ist der detaillierte Inhalt vonPHP-Gleitkomma-Subtraktion ist ungleich 0. 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