浮點型(也叫浮點數 float,雙精確度數 double 或實數 real。浮點數的字長和平台相關,儘管通常最大值是 1.8e308 並具有 14 位十進位數位精度(64 位元 IEEE 格式)。
浮點數的精度有限。儘管取決於系統,PHP 通常使用 IEEE 754 雙精確度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行複合運算時的誤差傳遞。
此外,以十進位能夠精確表示的有理數如 0.1 或 0.7,無論有多少尾數都不能被內部所使用的二進位精確表示,因此不能在不丟失一點點精度的情況下轉換為二進位的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999999991118...。
所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。
本文執行個體講述了php 浮點數取餘的方法。分享給大家供大家參考,具體如下:
一般我們進行取餘運算第一個想到的就是用百分比符號%,但當除數是個很大的數值,超出了int範圍時,這樣取餘就不準確了。
php大數(浮點數)取餘函數:
/** * php大數取餘 * * @param int or float $bn 除數 * @param int $sn 被除數 * @return int 餘數 *///大數(浮點數)取餘方法function Kmod($bn, $sn) { return intval(fmod(floatval($bn), $sn));}
測試代碼:
//大數(浮點數)取餘方法function Kmod($bn, $sn) { return intval(fmod(floatval($bn), $sn));}//整數取餘方法function mod($bn, $sn) { return $bn%$sn;}//最大的int整數$bn = PHP_INT_MAX;$sn = 11;var_dump($bn);var_dump(Kmod($bn, $sn));var_dump(mod($bn, $sn));//給最大的int整數加1$bn = PHP_INT_MAX + 1;var_dump($bn);var_dump(Kmod($bn, $sn));var_dump(mod($bn, $sn));
執行結果:
int 2147483647int 1int 1float 2147483648int 2int -2