Dieser Artikel stellt hauptsächlich die Lösung für die ungenaue Gleitkommaoperation unter PHP vor. Ich hoffe, dass er für alle hilfreich ist.
Machen Sie kürzlich eines? Das Problem der Addition und Subtraktion besteht darin, dass Gleitkommaoperationen ungenau sind. Es scheint wahr zu sein, dass interpretierte Sprachen Probleme mit Gleitkommaoperationen haben.
Schauen Sie sich zunächst einen Teil des Codes an:
<?php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);
Der gedruckte Wert ist tatsächlich boolean false
Warum ist das so? Das PHP-Handbuch enthält die folgende Warnmeldung für Gleitkommazahlen:
Warnung
Gleitkommagenauigkeit
Anscheinend können einfache Dezimalbrüche wie 0,1 oder 0,7 nicht in das interne Binärformat umgewandelt werden, ohne ein wenig an Präzision zu verlieren. Dies kann zu verwirrenden Ergebnissen führen: Beispielsweise gibt floor((0.1+0.7)*10) normalerweise 7 statt der erwarteten 8 zurück, da die interne Darstellung des Ergebnisses etwa 7.9999999999... ist.
Dies hängt damit zusammen, dass es unmöglich ist, bestimmte Dezimalbrüche mit einer endlichen Anzahl von Ziffern genau auszudrücken. Beispielsweise wird 1/3 in Dezimalzahl zu 0,3333333.
Vertrauen Sie also niemals darauf, dass das Ergebnis einer Gleitkommazahl bis zur letzten Ziffer genau ist, und vergleichen Sie niemals zwei Gleitkommazahlen, um festzustellen, ob sie gleich sind. Wenn Sie wirklich eine höhere Präzision benötigen, sollten Sie mathematische Funktionen mit beliebiger Präzision oder GMP-Funktionen verwenden.
Dann sollten wir die obige Berechnung als
Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Lernen aller hilfreich sein wird.
Verwandte Empfehlungen:
PHP implementiert die Formatierungsfunktion für SQL-Anweisungen
phpMethode zur Implementierung monomorpher Entwurfsmuster
Methode des TP5-Request-Anforderungsobjekts in PHP
Das obige ist der detaillierte Inhalt vonLösungen für ungenaue Gleitkommaoperationen unter PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!