3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個贊
原因:浮點(diǎn)數(shù)的精度問題。
轉(zhuǎn)為整型
注意:
-
向下取整,即:
12910.9
會被轉(zhuǎn)換為12910
<?php var_dump(intval(12910.9)); // 輸出 // int(12910)
-
浮點(diǎn)數(shù)精度
看如下執(zhí)行結(jié)果:
我們知道:$receive_money
值小于12911
總結(jié):所以,最后 $receive_money
轉(zhuǎn)換為整型時,向下取整,結(jié)果為:12910
參考:
問題補(bǔ)充:
為什么 float(12911) 沒有顯示成 12910.9999... 呢?
這是由于浮點(diǎn)數(shù)的二進(jìn)制表示形式?jīng)Q定的。
看如下示例:
我們看到第 9 行代碼 float(12911)
擴(kuò)展整數(shù)位之后,轉(zhuǎn)換成整型表示:int(129109999)
。
然后,我們對比了 float(12911)
跟 int(12911)
在二進(jìn)制上的差別。
是不是發(fā)現(xiàn)了什么?(二進(jìn)制的最后一位)這是 PHP-bug
么?當(dāng)然不是。
而且我們同樣也注意到了第 8 行代碼輸出結(jié)果為:float(129110000)
,這又是為什么呢?
為什么不是 float(129109999)
呢?
我們看一下 PHP
源碼中浮點(diǎn)數(shù)是什么:
如圖:php-float
等于 c-double
我想如下幾個問題可以解決上述的疑問:雙精度浮點(diǎn)數(shù)
的二進(jìn)制形式是如何表示的呢? 請參考:wikipedia-雙精度浮點(diǎn)數(shù)
浮點(diǎn)數(shù)是如何處理乘法運(yùn)算的呢? 請參考:wikipedia-浮點(diǎn)數(shù)的乘法和除法
如果上邊兩個問題不愿深究,可以直接參考鳥哥的一篇博客:PHP浮點(diǎn)數(shù)的一個常見問題的解答
以上為個人理解,如果錯誤之處,請指出。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個贊
(143.66 - 14.55) * 100 = 12910.999999999998
浮點(diǎn)數(shù)接近12911
12910.999999999998
這個數(shù)的整形不就是 12910么..
- 3 回答
- 0 關(guān)注
- 1190 瀏覽
添加回答
舉報(bào)