2 回答

TA貢獻1869條經驗 獲得超4個贊
切勿將未知分數轉換為整數,因為這有時會導致意外結果。
根據 PHP 文檔
浮點數的精度有限。盡管取決于系統,但 PHP 通常使用 IEEE 754 雙精度格式,由于在 1.11e-16 的數量級四舍五入,這將給出最大的相對誤差。非初等算術運算可能會產生較大的誤差,當然,當多個運算復合時,必須考慮誤差傳播。
此外,可以精確表示為以 10 為底的浮點數的有理數,如 0.1 或 0.7,沒有精確表示為以 2 為底的浮點數,無論尾數大小如何,它都在內部使用。因此,它們不能被轉換成它們內部的二進制對應物,而不會有小的精度損失。這可能會導致令人困惑的結果:例如, floor((0.1+0.7)*10) 通常會返回 7 而不是預期的 8,因為內部表示將類似于 7.9999999999999991118...。
請參閱此參考。

TA貢獻1860條經驗 獲得超9個贊
像這樣試試。
$amount = 40902.70; // Same for 40902.20
$amounts= intval(strval($amount*100));;
echo $amounts;
注意:intval 和 int 通過截斷數字的小數部分將雙精度數轉換為整數。
欲了解更多信息檢查:參考
$test1 = intVal(1999);
$amount = 19.99 * 100;
$test2 = intVal($amount);
$test3 = intVal("$amount");
echo $test1 . "<br />\n";
echo $test2 . "<br />\n";
echo $test3 . "<br />\n";
expected output:
1999
1999
1999
actual output
1999
1998
1999
似乎是一個浮點問題,但數字 1999 是我能夠做到這一點的唯一數字。19.99 是很多東西的價格,為了我們的目的,我們必須將它作為 1999 而不是 19.99 傳遞。
- 2 回答
- 0 關注
- 167 瀏覽
添加回答
舉報