PHP intval函数向下舍入整数

时间:2015-12-01 08:35:10

标签: php casting int rounding

这是我在PHP中看到的最愚蠢的行为。

$num = 4400 / 1.1;
echo doubleval($num); // prints 4000
echo intval($num); // prints 3999

为什么会发生这种情况以及如何解决?

2 个答案:

答案 0 :(得分:2)

0.1和0.7之类的数字不适用于二进制表示 阅读'警告'第here部分

如果你需要除以1.1,我建议你这样做:

$num = (4400 * 10) / 11;

$num = (4400 * 10.0) / 11;

因为11可以精确地表示为二进制数。

intval()会将不准确的结果截断为最接近 doubleval()将四舍五入到最近。

答案 1 :(得分:0)

此问题继承自C语言。

比较浮动值时会有一点差异,

请参阅this,ans this

试试这个,

$tot = 0;
$ans = (float)101;
for($i=1; $i<= 10; $i++){
    $tot = $tot + 10.1;
}

if (abs(($tot-$ans)/$tot) < 0.00001) {
    echo '<br />Both are equal ';
}
else{
    echo '<br />Both are not equal ';
}

输出abs()

Both are equal 

没有abs()输出

Both are not equal

对于上述删除abs(),即使值相同(小数点也会有小差异),它也会输入else

因此请使用abs()来解决此问题