PHP 倒圆到整数

2022-08-30 16:03:31

我想对一个数字进行四舍五入,我需要一个合适的整数,因为我想将其用作数组键。想到的第一个“解决方案”是:

$key = (int)round($number)

但是,我不确定这是否始终有效。据我所知,只需截断任何小数,并且由于返回理论上精度有限的浮点数,因此是否有可能返回类似7.999999的东西...然后是7而不是8?(int)round($number)round($number)$key

如果这个问题真的存在(我不知道如何测试),如何解决?或:

$key = (int)(round($number) + 0.0000000000000000001) // number of zeros chosen arbitrarily

还有比这更好的解决方案吗?


答案 1

要正确舍入浮子,可以使用:

这些函数返回 float,但来自 Niet the Dark Absol 的评论“存储在浮点数中的整数始终是准确的,最高约为 2^51,这远远超过存储在 int 中所能存储的整数。


答案 2

round(),而不设置精度,则始终舍入为最接近的整数。默认情况下,舍入为零位小数。

所以:

$int = 8.998988776636;
round($int) //Will always be 9

$int = 8.344473773737377474;
round($int) //will always be 8

因此,如果您的目标是将其用作数组的键,这应该没问题。

当然,您可以使用模式和精度来准确指定您想要的行为方式。请参阅此内容round()

更新

实际上,您可能对 intval 更感兴趣:

echo intval(round(4.7)); //returns int 5
echo intval(round(4.3)); // returns int 4

推荐