PHP四舍五入得到00作为答案


PHP rounding gives 00 as an answer

我有一个简单的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);