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


floor(24.24*1e4) returns wrong value

执行一些坐标舍入,我遇到了一些错误或什么,不同的数字,它工作,因为我需要

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

24.2399的回报

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

问题与浮点精度有关

尽管PHP手册上写着"返回下一个最小的整数值,必要时将值四舍五入",但如果你继续往下阅读PHP手册中floor()的"返回值",你会看到:

value舍入到下一个最小的整数floor()的返回值仍然是float类型,因为float的值范围通常是

当检出float类型时,我们看到一个警告:

浮点数具有有限的精度。尽管这取决于在系统中,PHP通常使用IEEE 754双精度格式,哪一种会由于顺序的舍入而产生最大的相对误差1.11 e-16。非初等算术运算可能给出更大的错误,当然,错误传播时必须考虑几个操作是复合的。

你的错误是由于浮点值,有时会发生。

你试过这个吗?

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

或者你可以使用round和一个可选参数来对指定的小数进行四舍五入。

例如:

round($res, 4)