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

PHP-Gleitkomma-Subtraktion ist ungleich 0

angryTom
Freigeben: 2023-02-27 20:02:02
Original
3667 Leute haben es durchsucht

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

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)
Nach dem Login kopieren

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!

Verwandte Etiketten:
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
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage