Lassen Sie uns über häufige Probleme bei der Konvertierung von Gleitkommazahlen in PHP sprechen

PHPz
Freigeben: 2023-03-23 14:18:01
Original
1517 Leute haben es durchsucht

Gleitkommazahlen spielen eine sehr wichtige Rolle in der Programmierung und werden in vielen Bereichen benötigt, einschließlich Wirtschaftsberechnungen, Datenaufzeichnung, physikalischen Simulationen usw. Bei Gleitkommaberechnungen können jedoch aufgrund der Speicher- und Verarbeitungsmechanismen des Computers einige Probleme auftreten. In diesem Artikel werden die Konvertierung von Gleitkommazahlen, Präzisionsprobleme, Lösungen und Best Practices in PHP vorgestellt.

1. Darstellung von Gleitkommazahlen

In Computern bestehen Gleitkommazahlen aus einer Dezimalzahl und einem Exponenten und werden normalerweise in wissenschaftlicher Notation ausgedrückt.

Zum Beispiel: 1,234e+4 bedeutet 1,234 mal 10 hoch vier. Diese Zahl ist in zwei Teile unterteilt:

  • Koeffizient: 1,234
  • Exponent: 4

In PHP werden Gleitkommazahlen im 64-Bit-Format IEEE-754 mit den folgenden Komponenten dargestellt:

  1. Vorzeichenbit : Das erste Bit repräsentiert positiv und negativ, 0 ist eine positive Zahl und 1 ist eine negative Zahl.
  2. Exponentenbit: Die mittleren 11 Bits stellen den Exponenten dar, wobei die Exponentencode-Darstellungsmethode verwendet wird. Der Wertebereich liegt zwischen -1022 und 1023 und ist um 1023 versetzt. Der Wert in der Codierung ist also der tatsächliche Wert + 1023.
  3. Mantissenbits: Die restlichen 52 Bits repräsentieren die Mantisse in binärer Dezimalschreibweise. 2. Problem bei der Konvertierung von Gleitkommazahlen in PHP Zahlen, aber bei der Durchführung komplexer Berechnungen können leicht Fehler auftreten.
Zum Beispiel:

$a = 0.1;
$b = 0.2;
$c = $a + $b;
echo $c; //0.3
if ($c == 0.3) {
    echo 'true';
} else {
    echo 'false';
}
Nach dem Login kopieren
Beim Ausführen dieses Codes ist die Ergebnisausgabe falsch. Dies liegt daran, dass die Art und Weise, wie Gleitkommazahlen im Computer gespeichert werden, von der Dezimaldarstellung abweicht und es ein Genauigkeitsproblem gibt.
    Konvertierung einer Gleitkommazahl in einen String fehlgeschlagen
Beim Konvertieren einer Gleitkommazahl in einen String kann es ebenfalls zu einem Konvertierungsfehler kommen.

Zum Beispiel:

$val = 0.0000005;
$str = (string)$val;
echo $str; //5.0E-7
Nach dem Login kopieren
Diese Zeichenfolge wird offensichtlich nicht in der von uns erwarteten Weise konvertiert. Dies liegt daran, dass Gleitkommazahlen eine wissenschaftliche Notation verwenden und daher auch in wissenschaftlicher Notation ausgedrückt werden, wenn sie in Zeichenfolgen umgewandelt werden.

    3. Gleitkomma-Konvertierungslösungen und Best Practices in PHP

Verwenden Sie Vergleichsoperatoren zum Vergleich

Beim Vergleich von Gleitkommazahlen sollten wir den Gleichheitsoperator (==) nicht direkt verwenden, aber die folgende Lösung kann verwendet werden:

$a = 0.1;
$b = 0.2;
$c = $a + $b;
$epsilon = 0.00001;//可以酌情调整
if(abs($c - 0.3) < $epsilon) {
    echo 'true';
} else {
    echo 'false';
}
Nach dem Login kopieren
Hier legen wir einen Fehlerbereich $epsilon fest. Wenn die Differenz zwischen dem Absolutwert des Berechnungsergebnisses und dem erwarteten Ergebnis kleiner als $epsilon ist, werden die beiden Zahlen als gleich beurteilt.

Verwenden Sie die Sprintf-Funktion, um die Ausgabe zu formatieren.

  1. Wenn wir Gleitkommazahlen in Zeichenfolgen konvertieren müssen, können wir die Sprintf-Funktion verwenden, um die Ausgabe zu formatieren.
Zum Beispiel:

$val = 0.0000005;
$str = sprintf("%.10f", $val);
echo $str; //0.0000005000
Nach dem Login kopieren
%.10f in der Sprintf-Funktion bedeutet, dass 10 Nachkommastellen ausgegeben werden. Die ursprüngliche Bedeutung von %f ist „Gleitkommazahl“. Zahl soll beibehalten werden.

    Verwenden Sie die BC-Mathe-Funktionsbibliothek
Wenn Sie hochpräzise Berechnungen benötigen, können Sie die BC-Mathe-Funktionsbibliothek verwenden. Diese Bibliothek stellt Funktionen bereit, die hochpräzise Datenoperationen unterstützen, wodurch Präzisionsfehler bei Gleitkommaberechnungen vermieden werden können.

Zum Beispiel:

$a = '0.1';
$b = '0.2';
$c = bcadd($a, $b, 3);
echo $c; //0.300
Nach dem Login kopieren
Diese Methode erfordert die explizite Einführung der BC-Mathe-Funktionsbibliothek im Code und muss bei Verwendung auch gemäß den Spezifikationen der Bibliotheksfunktionen aufgerufen werden.

    4. Zusammenfassung
In diesem Artikel haben wir etwas über häufige Probleme und Lösungen erfahren, die bei der Konvertierung von Gleitkommazahlen in PHP auftreten können. Obwohl es bei den zugrunde liegenden Gleitkommaberechnungen von PHP Genauigkeitsprobleme gibt, können wir diese Probleme durch einige Techniken und Bibliotheksfunktionen lösen, um eine zuverlässigere numerische Berechnungsunterstützung für die Projektimplementierung bereitzustellen.

Das obige ist der detaillierte Inhalt vonLassen Sie uns über häufige Probleme bei der Konvertierung von Gleitkommazahlen in PHP sprechen. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage