执行一些坐标舍入,我遇到了一些错误或什么,不同的数字,它工作,因为我需要
$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)