由於大多數分數的二進位表示形式,浮點計算可能不精確。 php.ini 的精確度設定可讓您指定 PHP 計算浮點數值的位元數。
問題 1: 可以依靠解決方法來進行精確的兩位數貨幣計算嗎?
答案 1: 否。 php.ini 精確度設定無法保證精確的兩位數計算,因為精確度長度可能會在
問題2:您能否提供解決方法失敗的範例?
範例:
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
問題3:什麼php.ini. precision 值適合兩位數貨幣計算?
答案 3: 不建議使用 php.ini 精確度進行金融計算。考慮替代解決方案,例如 bcmmath 或 number_format。
示例代碼:
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;
輸出:
584.15999999997438863 584.15999999999996817 // round is not reliable 584.16 584.15 // bcsub is more precise with precision=20
結論:
對於精確的兩位數計算,依賴php.ini 精確度解法是不可靠的。考慮使用 bcmmath 或 number_format 進行準確的財務計算。
問題 1:對於 0 到 999999.99 之間的數字,解決方法會失敗嗎?
答案 1: 由於組合數量眾多,完整的測驗是不切實際的。然而,使用 0.19 0.16 ... 0.01 進行簡單測試會產生意外結果 (1.0408341E-17),精度設定為 8,這表明該解決方法並不完全可靠。
問題 2: 我們如何估計解決方法何時會失敗?
答案 2: 雖然存在數學公式,但它們可能很複雜,並且對於確定故障點並不總是實用。
以上是PHP的php.ini精度設定能否保證精確的兩位數貨幣計算?的詳細內容。更多資訊請關注PHP中文網其他相關文章!