执行一些坐标舍入,我遇到了一些错误或其他东西,使用不同的数字它可以根据需要工作
$res = floor(24.24*1e4)/1e4;
echo $res;
返回 24.2399
你知道这个 242400 有什么特别之处吗,它返回 242399?
问题与浮点精度有关
即使 PHP 手册说“如果需要,通过向下取整返回下一个最低整数值”。如果您在floor()的 PHP 手册中进一步阅读“返回值”页面,您会看到:
值四舍五入到下一个最小整数。的返回值
floor()
仍然是 float 类型,因为 float 的取值范围通常大于 integer。
当我们检查浮点类型时,我们会看到一个警告:
浮点数的精度有限。尽管取决于系统,但 PHP 通常使用 IEEE 754 双精度格式,由于在 1.11e-16 的数量级四舍五入,这将给出最大的相对误差。非初等算术运算可能会产生较大的误差,当然,当多个运算复合时,必须考虑误差传播。
您的错误是由于浮点值引起的,有时会发生。
你试过这个吗?
$res = floor((int)(24.24*1e4))/1e4;
echo $res;
或者,您可以使用带有可选参数的 round 以特定小数四舍五入。
对于您的示例:
round($res, 4)