Heim >Backend-Entwicklung >PHP-Tutorial >Wie vergleiche ich Gleitkommazahlen in PHP?
Gleitkommazahlen weisen während des Konvertierungsprozesses Fehler auf, sodass Gleitkommazahlen im Allgemeinen nicht direkt verglichen werden können, wenn die Differenz zwischen den beiden Zahlen innerhalb liegt einen akzeptablen Bereich, dann betrachten wir die beiden Gleitkommazahlen als gleich. In diesem Artikel wird hauptsächlich die Vergleichsmethode php für Gleitkommazahlen vorgestellt, die einen guten Referenzwert hat. Werfen wir einen Blick darauf mit dem Editor unten
Das Problem der Genauigkeit von Gleitkommaoperationen
Schauen Sie sich zunächst ein Beispiel an:
<?php $a = 0.1; $b = 0.9; $c = 1; var_dump(($a+$b)==$c); var_dump(($c-$b)==$a); ?>
$a+$b ==$c gibt wahr, richtig zurück
$c-$b==$a gibt falsch, falsch zurück
Warum ist das so?
Nach dem Vorgang lautet der tatsächlich zurückgegebene Inhalt bei einer Genauigkeit von 20 Stellen wie folgt:
<?php $a = 0.1; $b = 0.9; $c = 1; printf("%.20f", $a+$b); // 1.00000000000000000000 printf("%.20f", $c-$b); // 0.09999999999999997780 ?>
$c-$b ist 0,09999999999999997780, also mit 0,1 vergleichen und false zurückgeben
Dieses Problem tritt auf, weil die Berechnung von Gleitkommazahlen Präzision erfordert. Wenn Gleitkommazahlen in Binärzahlen umgewandelt werden, kann die Genauigkeit verloren gehen.
Umrechnungsmethode von Gleitkommazahlen in Binärzahlen
Der ganzzahlige -Teil übernimmt die Division durch 2, um den Rest Methode
Der Dezimalteil wird mit dermultipliziert mit 2 Methode
gerundet. Zum Beispiel: Wandeln Sie die Zahl 8,5 in eine Binärzahl um
Der ganzzahlige Teil ist 8
8/2=4 8%2= 04/2=2 4 %2=0
2/2=1 2%2=0
1000
Der Dezimalteil ist 0,5
0,5x2 = 1,0Da der Dezimalteil nach dem Runden 0 ist, ist keine weitere Berechnung erforderlichDas Binärsystem der Dezimalzahl 0,5 ist 0,18,5 Das Binärsystem von ist 1000,1
Berechne die Zahl 0,9 Binär
0,9x2=1,80,8x2=1,6
0,6x2=1,2
0,2x2=0,4
0,4x2=0,8
0,8x2 =1,6
Schleife fortgesetzt Ist N, wird die Zahl nach N gerundet, was zu einem Genauigkeitsverlust führt.
Im obigen Beispiel geht die Genauigkeit von 0,9 bei der Konvertierung in Binär verloren, was zu Fehlern beim Vergleich führt.Glauben Sie also niemals, dass eine Gleitkommazahl bis auf die letzte Ziffer genau ist, und vergleichen Sie niemals zwei Gleitkommazahlen auf Gleichheit.
So vergleichen Sie Gleitkommazahlen richtig
1. Verwenden Sie zum Verarbeiten und anschließenden Vergleichen die Rundungsmethode >Beispiel:
<?php $a = 0.1; $b = 0.9; $c = 1; var_dump(($c-$b)==$a); // false var_dump(round(($c-$b),1)==round($a,1)); // true ?>
2. Verwenden Sie hochpräzise BerechnungsmethodenBei der Durchführung von Berechnungen Verwenden Sie zunächst hochpräzise Berechnungsmethoden. Präzisionsberechnungsmethoden, um sicherzustellen, dass die Präzision nicht verloren geht.
Die hochpräzise Betriebsmethode ist wie folgt:
bcadd Konvertieren Sie zwei hochpräzise Zahlen Add
bccomp Vergleicht zwei hochpräzise Zahlen und gibt -1,0,1
zurück bcpDividiere zwei hochpräzise Zahlen
bcmodErmittle den Rest einer hochpräzisen Zahl
bcmulMultiplizieren Sie zwei hochpräzise Zahlen
bcpowErmitteln Sie die Potenz einer hochpräzisen Zahl
bcpowmodErmitteln Sie den Modul der Potenz hochpräziser Zahlen
bcscaleKonfigurieren Sie die Standardanzahl der Dezimalstellen , was Linux in bc ”scale=”
bcsqrt entspricht. Finden Sie die Quadratwurzel einer hochpräzisen Zahl
bcsub Kombinieren Sie zwei hochpräzise digitale Subtraktion Beispiel:
Das obige ist der detaillierte Inhalt vonWie vergleiche ich Gleitkommazahlen in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!