天天看點

php浮點數計算比較及取整不準确解決方法

php有意思的現象,應該是很多程式設計語言都會有這樣的現象。這個是因為計算機的本身對浮點數識别的問題.....

$f = 0.58;  

var_dump(intval($f * 100 *100)); //結果5799  

var_dump((float)($f * 100 *100)); //結果5800  

echo (int)((0.1+0.7)*10);  //結果7  

echo (float)((0.1+0.7)*10);  //結果8  

<?php  

$a = 0.1;  

$b = 0.7;  

var_dump(($a + $b) == 0.8);  

//列印出來的值居然為 boolean false  

var_dump(bcadd($a,$b,2) == 0.8);// bool true  

在浮點數計算的時候,切記不要把浮點數轉換成整形,否則會出現不可能預估的錯誤。

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