PHP舍入到整数

And*_*eKR 12 php floating-point integer rounding

我想舍入一个数字,我需要一个正确的整数,因为我想将它用作数组键.想到的第一个"解决方案"是:

$key = (int)round($number)
Run Code Online (Sandbox Code Playgroud)

但是,我不确定这是否会一直有效.据我所知(int)只是截断任何小数,因为round($number)返回一个理论上有限精度的浮点数,是否有可能round($number)返回类似7.999999 ...然后$key是7而不是8?

如果这个问题确实存在(我不知道如何测试它),它怎么能解决?也许:

$key = (int)(round($number) + 0.0000000000000000001) // number of zeros chosen arbitrarily
Run Code Online (Sandbox Code Playgroud)

有没有比这更好的解决方案?

Mis*_*lis 18

要正确地圆形浮动,您可以使用:

这些函数返回float,但是来自Niet的Dark Absol评论:"存储在浮点数中的整数总是准确的,最多大约2 ^ 51,这远远超过可以存储在int中."


Zac*_*own 8

round(),如果没有设置精度,则始终四舍五入到最接近的整数。默认情况下,四舍五入到小数点后零位。

所以:

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

$int = 8.344473773737377474;
round($int) //will always be 8
Run Code Online (Sandbox Code Playgroud)

因此,如果您的目标是使用它作为数组的键,那么这应该没问题。

当然,您可以使用模式和精度来准确指定您想要的round()行为方式。看到这个

更新

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

echo intval(round(4.7)); //returns int 5
echo intval(round(4.3)); // returns int 4
Run Code Online (Sandbox Code Playgroud)