Heim >Backend-Entwicklung >PHP-Problem >Besprechen Sie das Problem ungleicher Gleitkommazahlen in PHP
PHP ist eine beliebte Programmiersprache und eine serverseitige Skriptsprache. In PHP verfügt es über flexible und leistungsstarke Funktionen und wird daher häufig im Bereich der Webentwicklung eingesetzt.
Bei der PHP-Programmierung stoßen wir häufig auf Berechnungen von Gleitkommazahlen. Da die Nachkommazahlen von Gleitkommazahlen jedoch schwer genau darzustellen sind, führt dies häufig zu falschen Ergebnissen beim Vergleich, ob zwei Gleitkommazahlen gleich sind . Ergebnis.
Lassen Sie uns das Problem ungleicher Gleitkommazahlen in PHP diskutieren.
Eine Gleitkommazahl ist eine Zahl, die zur Darstellung von Dezimalzahlen verwendet wird. Sie besteht aus zwei Elementen: der Mantisse und dem Exponenten. Im IEEE 754-Standard werden Gleitkommazahlen binär dargestellt.
Da sich die Genauigkeit von Gleitkommazahlen mit der Größe des Werts ändert, müssen Sie bei der Durchführung von Vergleichsoperationen auf die Eigenschaften von Gleitkommazahlen achten.
Zum Beispiel:
$a = 0.1 + 0.2; $b = 0.3; echo ($a == $b) ? "Equal" : "Not Equal";
Wir erwarten, dass das Ausgabeergebnis gleich ist. Das tatsächliche Ausgabeergebnis ist jedoch „Ungleich“.
Warum ist das so? Dies liegt daran, dass Gleitkommazahlen in Computern in Binärform gespeichert werden, sodass 0,1 und 0,2 bei der Umwandlung in Binärzahlen eine unendlich wiederkehrende Dezimalzahl sind und der Computer nur eine begrenzte Anzahl von Ziffern zum Speichern verwenden kann. Wenn der Computer daher 0,1 und 0,2 in Binärwerte umwandelt, werden sie nicht genau gespeichert und das Endergebnis weicht leicht ab. Diese Abweichung summiert sich während des Additionsvorgangs und führt dazu, dass das Ergebnis nicht dem erwarteten Wert entspricht.
In PHP gibt es mehrere Möglichkeiten, zwei Gleitkommazahlen auf Gleichheit zu vergleichen. Lassen Sie uns diese Methoden im Folgenden vorstellen.
Die Funktion „round()“ kann Gleitkommazahlen auf eine bestimmte Anzahl von Stellen runden. Wenn wir also zwei Gleitkommazahlen auf Gleichheit vergleichen möchten, können wir sie zunächst mit der Funktion „round()“ auf die gleiche Anzahl von Dezimalstellen runden und sie dann vergleichen.
Zum Beispiel:
$a = 0.1 + 0.2; $b = 0.3; $precision = 14; if (round($a, $precision) == round($b, $precision)) { echo "Equal"; } else { echo "Not Equal"; }
Im obigen Beispiel gibt die Variable $precision die Anzahl der zu rundenden Dezimalstellen an. In diesem Beispiel verwenden wir die Funktion „round()“, um zwei Zahlen auf 14 Dezimalstellen zu runden und sie dann zu vergleichen, um das richtige Ergebnis zu erhalten.
Wenn wir einen präzisen Gleitkommavergleich durchführen müssen, können wir die von PHP bereitgestellte präzise Berechnungsbibliothek verwenden. Diese Bibliothek stellt einige Funktionen bereit, mit denen hochpräzise Berechnungen für Gleitkommazahlen durchgeführt werden können, wodurch Fehler vermieden werden, die bei Operationen mit Gleitkommazahlen auftreten.
Zu den häufig verwendeten Bibliotheken für genaue Berechnungen gehören BC Math- und GMP-Bibliotheken. Beide Bibliotheken bieten eine Reihe von Funktionen, mit denen verschiedene hochpräzise Gleitkommaoperationen ausgeführt werden können. Die Berechnungsergebnisse stimmen mit den tatsächlichen Ergebnissen überein.
Zum Beispiel:
$a = "0.1"; $b = "0.2"; $c = "0.3"; $sum = bcadd($a, $b, 2); // 计算a和b的和 if (bccomp($sum, $c, 2) == 0) { // 比较计算结果和期望结果 echo "Equal"; } else { echo "Not Equal"; }
Im obigen Beispiel verwenden wir die Funktion bcadd(), um den Wert der Variablen $sum zu berechnen, und verwenden dann die Funktion bccomp(), um zu vergleichen, ob die Werte von $sum und $ c sind gleich. Die Funktion bccomp() gibt 0 für Gleichheit, 1 für $sum größer als $c und -1 für $sum kleiner als $c zurück.
Aufgrund der Eigenschaften von Gleitkommazahlen müssen wir beim Vergleich von Gleitkommazahlen auf Gleichheit achten. Wir können nicht einfach „==“ zum Vergleich verwenden, sondern sollten andere Vergleichsmethoden verwenden. wie Rundungen und genaue Berechnungen warten. Nur wenn wir die richtige Vergleichsmethode beherrschen, können wir Gleitkommazahlenoperationen in PHP korrekt verarbeiten.
Das obige ist der detaillierte Inhalt vonBesprechen Sie das Problem ungleicher Gleitkommazahlen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!