执行一些四舍五入的坐标,我遇到了一些错误或其他的东西,根据我的需要使用不同的数字
$res = floor(24.24*1e4)/1e4;
echo $res;
返回24.2399
你知道这个242400有什么特别之处,它会返回242399吗?
答案 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)