Heim >Backend-Entwicklung >PHP-Tutorial >Kann ich mich bei präzisen Geldberechnungen auf die Präzision von PHP „php.ini' verlassen?
Gleitkomma-Arithmetik, ein komplexes Thema, das oft missverstanden wird, durchdringt moderne Computersysteme. Da es den meisten Bruchzahlen an einer exakten binären Darstellung mangelt, kommt es zwangsläufig zu Rundungen. Das Verständnis der Nuancen von Gleitkommaoperationen ist von entscheidender Bedeutung, wie in „Was jeder Informatiker über Gleitkommaarithmetik wissen sollte“ beschrieben.
Antwort: Nein, Sie können sich nicht auf PHP verlassen. ini-Präzisionseinstellungen für konsistente 2-stellige Genauigkeit, auch für Zahlen unter 10^6, da die Präzisionslänge während der Berechnungen zunehmen kann.
Antwort: Betrachten Sie das folgende Beispiel mit einem Rabatt von 10 % nur auf das erste Kilogramm:
ini_set('precision', 8); // Your precision $a = 5.88; // Cost of 1kg $q = 2.49; // User buys 2.49 kg $b = $a * 0.01; // 10% Discount only on the first kg echo ($a * $q) - $b;
Ausgabe: 14,5824 <- --- keine präzise 2-stellige Geldberechnung
Antwort: PHP-Präzisionseinstellungen sind keine zuverlässige Grundlage für Finanzberechnungen oder Gleitkomma-Präzision. Es ist besser, spezielle Bibliotheken oder Methoden zu verwenden.
Lassen Sie uns verschiedene Beispiele untersuchen, um die Genauigkeitsbeschränkungen zu veranschaulichen:
$a = 342349.23; $b = 341765.07; // Example A: precision = 20 echo $a - $b, PHP_EOL; // 584.15999999997438863 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.15999999999996817 (rounding introduces instability) echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.15 // Example B: precision = 14 echo $a - $b, PHP_EOL; // 584.15999999997 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.16 echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.16 // Example C: precision = 6 echo $a - $b, PHP_EOL; // 584.16 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.16 echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.00 // Example D: precision = 3 echo $a - $b, PHP_EOL; // 584 echo floatval(round($a - $b, 2)), PHP_EOL; // 584 echo number_format($a - $b, 2), PHP_EOL; // 584.16 (consistent) echo bcsub($a, $b, 2), PHP_EOL; // 0.00
Diese Beispiele zeigen die Inkonsistenzen, wenn man sich für genaue Berechnungen auf PHP-Präzisionseinstellungen verlässt.
Für zuverlässige Finanzberechnungen vergessen Sie Gleitkommazahlen und verwenden Sie Cent oder Erwägen Sie die Funktion „number_format“ für eine konsistente 2-stellige Genauigkeit.
ini_set('precision', 8); $a = 0.19; $b = 0.16; $c = 0.01; $d = 0.01; $e = 0.01; $f = 0.01; $g = 0.01;
Das obige ist der detaillierte Inhalt vonKann ich mich bei präzisen Geldberechnungen auf die Präzision von PHP „php.ini' verlassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!