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
要正确地圆形浮动,您可以使用:
ceil($number): 围捕round($number, 0):舍入到最接近的整数floor($number):向下舍入这些函数返回float,但是来自Niet的Dark Absol评论:"存储在浮点数中的整数总是准确的,最多大约2 ^ 51,这远远超过可以存储在int中."
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)
| 归档时间: |
|
| 查看次数: |
13549 次 |
| 最近记录: |