PHP中浮點數精度的警告

這個是PHP document中給出來的提示:


簡單的十進制分數如同 0.10.7 不能在不丟失一點點精度的情況下轉換爲內部二進制的格式。

floor(( 0.1 + 0.7 ) * 10)   返回 7 而不是8

(int)(( 0.1 + 0.7 ) * 10)  返回7而不是8.

 

對這種現象的解釋是“因爲該結果內部的表示其實是類似 7.9”。

 

所以得到的結論是:

所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。

決不要將未知的分數強制轉換爲Int。

 

(int)round( 0.1 + 0.7 ) * 10) 這樣似乎就安全了。

在有大量乘除或者是中間值爲float類型時,爲了數值精度還是使用BC math函數了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章