I'trying爲float轉換爲int值在PHP中:PHP意想不到的結果投
var_dump((int)(39.3 * 100.0)); //Returns 3929 but should be 3930!
var_dump((int)(39.2 * 100.0)); //Returns 3920
我可以使用小區,使其工作,但有人可以解釋這樣對我?
var_dump((int)ceil(39.3 * 100.0)); //Returns 3930
I'trying爲float轉換爲int值在PHP中:PHP意想不到的結果投
var_dump((int)(39.3 * 100.0)); //Returns 3929 but should be 3930!
var_dump((int)(39.2 * 100.0)); //Returns 3920
我可以使用小區,使其工作,但有人可以解釋這樣對我?
var_dump((int)ceil(39.3 * 100.0)); //Returns 3930
你應該看看這個頁面:http://php.net/manual/en/language.types.float.php。它描述了使用浮點數的陷阱。
另一個很好的參考,顯示這是大多數計算機語言的常見問題是http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems – 2010-08-02 07:42:55
// gives: int(3930)
var_dump(intval((39.3 * 100.0) . ''));
,或者與函數的使用:
function floatToInteger ($fValue)
{
return (intval(($fValue + 0) . ''));
}
// gives: int(3930)
var_dump(floatToInteger(39.3 * 100.0));
這可能是晚了,但要做到這一點是如下正確的方法:
(int) bcmul(39.3, 100.0); // 3930
(int) bcmul(39.2, 100.0); // 3920
以及處理數字/浮點數的計算,或涉及金錢交易的任何事情,你不應該直接使用乘法/分裂+投射。
請參見本還有:
http://php.net/manual/en/book.bc.php
通知:在我的答案鑄造僅僅是字符串轉換爲中等,(你不需要做)
一個簡單的說明,希望你期待3930,而不是3939. – Fenton 2010-08-02 07:12:41