我有一个简单的PHP,它旨在将浮点数四舍五入到小数点后的5位,但我得到了一个奇怪的结果,即00
这是我的代码:
$sum = (2*pi()) / (rand(5,10)*(0+1)*60*60*1000);
echo $sum.'<br/>';
echo round($sum,5);
这个结果:
2.90888208666E-7
00
我假设这是round()
的预期行为,但不确定如何解决问题,以便将数字精确到小数点后5位。
这个问题的原因是什么?我应该如何解决?
您有小数点后5位的数字。2.90888208666E-7
太小了(从末尾的E-7
可以看出,在小数点后五位,它四舍五入到0。
结尾的E-7
其实是有意义的!这是说2.90888 * pow(10, -7)
或2.90888 * 0.000001
的一种方式。请参阅Math.StackExchange上的"带E的数字"或维基百科上的"电子符号"。
所以,你得到的数字是0.000000290888208666
,(给或取零;))。这个数字太小了,如果你四舍五入到5位小数,它就变成了0。
此外,浮点值仍然是浮点值,如果您回显浮点值,则不会显示不相关的零。为了显示它们,您需要将数字格式化为字符串,并告诉PHP您需要多少小数。您可以使用number_format。
$output = round($sum, 5);
echo number_format($output, 5);