Heim  >  Artikel  >  Backend-Entwicklung  >  Kann die php.ini-Präzisionseinstellung von PHP genaue zweistellige Geldberechnungen garantieren?

Kann die php.ini-Präzisionseinstellung von PHP genaue zweistellige Geldberechnungen garantieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 12:27:03229Durchsuche

 Can PHP's php.ini Precision Setting Guarantee Accurate Two-Digit Monetary Calculations?

Kann der php.ini Precision Workaround von PHP Gleitkomma-Probleme beheben?

Gleitkommaberechnungen können aufgrund der binären Darstellung der meisten Brüche ungenau sein. Mit der php.ini-Einstellung für Präzision können Sie die Anzahl der Stellen angeben, auf die PHP Gleitkommawerte berechnet.

Zuverlässigkeit des Workarounds

Frage 1: Kann das Ist eine Problemumgehung für präzise zweistellige Geldberechnungen sinnvoll?

Antwort 1: Nein. Die php.ini-Präzisionseinstellung garantiert keine genauen zweistelligen Berechnungen, da die Präzisionslänge dabei zunehmen kann Berechnungen.

Beispiele für Fehler

Frage 2: Können Sie ein Beispiel nennen, bei dem die Problemumgehung fehlschlägt?

Beispiel:

ini_set('precision', 8);
$a = 5.88; // cost per kg
$q = 2.49; // quantity purchased (2.49 kg)
$b = $a * 0.01; // 10% discount on first kg
echo ($a * $q) - $b; // result not precisely two digits

Bester Php.ini.precision-Wert für zweistellige Geldberechnungen

Frage 3: Welcher php.ini.precision-Wert ist für zweistellige Geldberechnungen geeignet? Geldberechnungen?

Antwort 3: Die Verwendung der php.ini-Präzision für Finanzberechnungen wird nicht empfohlen. Erwägen Sie alternative Lösungen wie bcmmath oder number_format.

Einfaches Testen

Beispielcode:

ini_set('precision', 20); // set to 20
$a = 342349.23;
$b = 341765.07;

echo $a - $b, PHP_EOL;
echo floatval(round($a - $b, 2)), PHP_EOL;
echo number_format($a - $b, 2), PHP_EOL;
echo bcsub($a, $b, 2), PHP_EOL;

Ausgabe:

584.15999999997438863
584.15999999999996817    // round is not reliable
584.16
584.15  // bcsub is more precise with precision=20

Fazit:

Das Vertrauen auf den php.ini-Präzisions-Workaround ist für präzise zweistellige Berechnungen unzuverlässig. Erwägen Sie die Verwendung von bcmmath oder number_format für genaue Finanzberechnungen.

Update

Frage 1: Wird die Problemumgehung für Zahlen zwischen 0 und 999999,99 fehlschlagen?

Antwort 1: Ein vollständiger Test ist aufgrund der Vielzahl an Kombinationen nicht praktikabel. Ein einfacher Test mit 0,19 0,16 ... 0,01 führt jedoch zu einem unerwarteten Ergebnis (1,0408341E-17) mit einer auf 8 eingestellten Genauigkeit, was darauf hindeutet, dass die Problemumgehung nicht vollständig zuverlässig ist.

Frage 2:Wie können wir abschätzen, wann die Problemumgehung fehlschlägt?

Antwort 2:Es gibt zwar mathematische Formeln, diese können jedoch komplex und für die Bestimmung von Fehlerpunkten nicht immer praktisch sein.

Das obige ist der detaillierte Inhalt vonKann die php.ini-Präzisionseinstellung von PHP genaue zweistellige Geldberechnungen garantieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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