浮動小数点演算は、誤解されがちな複雑な主題であり、現代のコンピューター システムに浸透しています。ほとんどの小数は正確な 2 進表現に欠けているため、丸めが避けられません。 「すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと」で概説されているように、浮動小数点演算の微妙な違いを理解することが重要です。
答え: いいえ、10^6 未満の数値であっても、一貫した 2 桁の精度を得るために php.ini の精度設定に依存することはできません。長さは計算中に増加する可能性があります。
答え: 最初のキログラムにのみ 10% 割引が適用される次の例を考えてみましょう:
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;
出力: 14.5824
答え: PHP 精度設定財務計算や浮動小数点精度の信頼できる基礎ではありません。特殊なライブラリまたはメソッドを使用することをお勧めします。
精度の制限を説明するためにさまざまな例を調べてみましょう:
$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
これらの例は、正確な計算を行うために PHP の精度設定に依存する際の矛盾を示しています。
信頼できる財務計算を行うには、忘れてください。浮動小数点についてはセントを使用するか、一貫した 2 桁の number_format 関数を検討してください。精度.
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;
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3