4

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

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

返回 24.2399

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

4

2 回答 2

3

问题与浮点精度有关

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

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

当我们检查浮点类型时,我们会看到一个警告:

浮点数的精度有限。尽管取决于系统,但 PHP 通常使用 IEEE 754 双精度格式,由于在 1.11e-16 的数量级四舍五入,这将给出最大的相对误差。非初等算术运算可能会产生较大的误差,当然,当多个运算复合时,必须考虑误差传播。

于 2013-04-26T08:14:53.440 回答
1

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

你试过这个吗?

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

或者,您可以使用带有可选参数的 round 以特定小数四舍五入。

对于您的示例:

round($res, 4)
于 2013-04-26T08:12:15.520 回答