2009/09/19

小心 PHP 的 ceil() 函式

系統環境: FreeBSD 7.0 + PHP 5.2.6

ceil() 函式會回傳比輸入數值大且最接近輸入數值的整數,簡單地講就是無條件進位函式。官方手冊上的範例:

echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo ceil(-3.14); // -3


但是由於電腦精確度的關係,以下範例會得出錯誤的結果:

echo 100*1.1; // 110 正確
echo ceil(100*1.1); // 111 錯誤,怎麼多 1 ???
echo ceil(110); // 110 正確


修正方式: 把 ceil() 輸入參數先轉成字串即可。

function gceil($x) {
return ceil( $x . '' );
// or
// return ceil( (string) $x );
}

echo 100*1.1; // 110 正確
echo ceil(100*1.1); // 111 錯誤
echo gceil(100*1.1); // 110 正確

沒有留言:

張貼留言