Besprechen Sie die Gründe, warum PHP Float ungenau ist, und wie Sie dies vermeiden können

PHPz
Freigeben: 2023-03-28 17:48:55
Original
2009 Leute haben es durchsucht

PHP (Hypertext Preprocessor) ist eine beliebte serverseitige Open-Source-Programmiersprache, die häufig für die dynamische Webentwicklung verwendet wird.

In PHP ist Float ein Datentyp, der zur Darstellung von Zahlen mit Dezimalteilen verwendet wird, z. B. 3,14. Einige PHP-Entwickler haben jedoch festgestellt, dass es bei der Verwendung von Floats zu Ungenauigkeiten kommt.

In diesem Artikel werden die Gründe erläutert, warum PHP Float ungenau ist, und wie man Float richtig verwendet.

1. Warum Float nicht genau ist

In Computern sind Gleitkommazahlen begrenzt, da Computer nur Zahlen begrenzter Länge darstellen können. Daher können bei der Verwendung von Gleitkommazahlen für Berechnungen einige Ungenauigkeiten auftreten.

Zum Beispiel erwartet in PHP der folgende Code:

$a = 0.1;
$b = 0.2;
$c = $a + $b;
echo $c;
Nach dem Login kopieren

, dass die Ausgabe 0,3 beträgt, aber tatsächlich ist die Ausgabe 0,30000000000000004.

Das liegt daran, dass 0,1 und 0,2 im Computer unendlich sind und nicht genau dargestellt werden können. Bei der Berechnung von 0,1+0,2 addiert der Computer zwei unendliche Zahlen und das Ergebnis muss mithilfe einiger Näherungen ausgedrückt werden, was zu ungenauen Ergebnissen führt.

2. So vermeiden Sie ungenaue Floats

Obwohl Float ungenau ist, muss es in einigen Szenarien dennoch verwendet werden. Zu diesem Zeitpunkt müssen Entwickler auf die folgenden Punkte achten, um Ungenauigkeiten so weit wie möglich zu vermeiden:

1. Vermeiden Sie den direkten Vergleich von Floats.

Da Floats unterschiedliche Darstellungen haben können, kann ein direkter Vergleich von Floats zu unerwarteten Ergebnissen führen.

Zum Beispiel:

$a = 0.1;
$b = 0.2;
$c = 0.3;
if ($a + $b == $c) {
    echo "equals";
} else {
    echo "not equals";
}
Nach dem Login kopieren

Das Ausgabeergebnis dieses Codes ist „ungleich“, da das Ergebnis von $a+$b nicht genau dem Ergebnis von $c entspricht.

Wenn Sie vergleichen müssen, können Sie die folgende Methode verwenden:

$epsilon = 0.00001;
if (abs($a+$b-$c) < $epsilon) {
    echo "equals";
} else {
    echo "not equals";
}
Nach dem Login kopieren

Auf diese Weise können Sie einen „Fehlertoleranzwert“ verwenden, um festzustellen, ob zwei Floats gleich sind.

2. Verwenden Sie die Rundungsfunktion

Die Rundungsfunktion kann eine Gleitkommazahl auf eine angegebene Anzahl von Dezimalstellen runden. Dadurch kann das Problem der Float-Ungenauigkeit bis zu einem gewissen Grad behoben werden.

Zum Beispiel:

$a = 0.1;
$b = 0.2;
$c = $a + $b;
echo round($c, 1);  //输出0.3
Nach dem Login kopieren

3. Verwenden Sie eine Ganzzahl anstelle einer Gleitkommazahl. Wenn präzise Berechnungen erforderlich sind, können Sie eine Ganzzahl anstelle einer Gleitkommazahl verwenden. Sie können beispielsweise einen Währungswert in Cent umrechnen, die Berechnung mit einer Ganzzahl durchführen und das Ergebnis dann in Dollar umrechnen.

$price = 2.68;  //2.68元
$price_in_cents = intval($price * 100);  //268分
$discount = 20;  //20%
$final_price_in_cents = $price_in_cents * (100 - $discount) / 100;
$final_price = number_format($final_price_in_cents / 100, 2);  //最终价格,2位小数
Nach dem Login kopieren

Dadurch können Ungenauigkeiten bei der Verwendung von Float für Berechnungen vermieden werden.

3. Zusammenfassung

In PHP ist Float ungenau, da der Computer Zahlen mit unendlicher Länge nicht genau darstellen kann. Um die Auswirkungen der Float-Ungenauigkeit zu vermeiden, können Sie die folgenden Maßnahmen ergreifen:

1 Vermeiden Sie den direkten Vergleich von Floats und verwenden Sie einen Fehlertoleranzwert, um zu bestimmen, ob zwei Floats gleich sind Float auf die angegebene Anzahl von Dezimalstellen;

3 Verwenden Sie für eine genaue Berechnung eine Ganzzahl anstelle von Float.


Natürlich müssen Sie bei der Verwendung von Float mehrere Situationen berücksichtigen und angemessen damit umgehen, um die Genauigkeit des Programms sicherzustellen.

Das obige ist der detaillierte Inhalt vonBesprechen Sie die Gründe, warum PHP Float ungenau ist, und wie Sie dies vermeiden können. 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