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;
, 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"; }
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"; }
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
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位小数
Dadurch können Ungenauigkeiten bei der Verwendung von Float für Berechnungen vermieden werden.
3. ZusammenfassungIn 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!