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 die Präzisionseinstellungen von php.ini verlassen für eine 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
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 es über Gleitkommazahlen und die Verwendung von 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;
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3