PHP round() 错误与 round(908.5449, 2, PHP_ROUND_HALF_UP) = 908.54?

php
发布时间:2021-02-25 08:04

我目前正在 PHP 中投资一个舍入问题。 我已经在 https://3v4l.org/NpRPp 进行了测试,从那时起它似乎都是一样的。

但这是正确的行为吗?因为我期待以下。

echo round(908.5449, 2, PHP_ROUND_HALF_UP); // should be 908.55, but returns actually 908.54

有人可以判断这种行为是否是有意为之,如果是,如何为每个可能的浮点数正确解决它?

编辑:多亏了答案,这种行为是正确的,但我期望得到错误的结果。我在程序中的原始数字是 908.55,由于在 DB 中的存储和浮点精度问题,程序链中的某个地方变成了 908.5449999999994。所以我希望它再次成为 908.55,这不适用于常规使用 round()

回答1

这工作正常。

的输出
echo round(908.5449, 2, PHP_ROUND_HALF_UP);

应该是908.54。您四舍五入到两位小数,因此四舍五入的余数是 0.0049。这小于 0.005,即为一半,因此四舍五入。