我目前正在 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()
。
这工作正常。
的输出echo round(908.5449, 2, PHP_ROUND_HALF_UP);
应该是908.54
。您四舍五入到两位小数,因此四舍五入的余数是 0.0049。这小于 0.005,即为一半,因此四舍五入。