floor(24.24 * 1e4)返回错误的值

时间:2013-04-26 08:03:25

标签: php floor

执行一些四舍五入的坐标,我遇到了一些错误或其他的东西,根据我的需要使用不同的数字

$res = floor(24.24*1e4)/1e4;
echo $res;

返回24.2399

你知道这个242400有什么特别之处,它会返回242399吗?

2 个答案:

答案 0 :(得分:3)

问题与浮点精度有关

即使PHP手册说“如果需要,通过舍入值返回下一个最小的整数值”。如果你在floor()的PHP手册中进一步阅读页面中的“返回值”,你会看到:

  

四舍五入到下一个整数floor()的返回值   仍然是float类型,因为float的值范围通常是   大于整数。

当我们结帐float类型时,我们会看到警告:

  

浮点数的精度有限。虽然这取决于   在系统中,PHP通常使用IEEE 754双精度格式,   由于订单的舍入,这将产生最大的相对误差   1.11e-16。非基本算术运算可能会更大   错误,当然,必须考虑错误传播   几个操作复杂化。

答案 1 :(得分:1)

您的错误是由浮动值引起的,有时会发生。

你试过这个吗?

$res = floor((int)(24.24*1e4))/1e4;
echo $res;

您可以使用带有可选参数的round来对特定小数进行舍入。

对于你的例子:

round($res, 4)