php - 为什么floor舍入整数?

ma *_*ong 1 php

我很困惑为什么:

echo log10(238328) / log10(62);
Run Code Online (Sandbox Code Playgroud)

结果3

echo floor(log10(238328) / log10(62));
Run Code Online (Sandbox Code Playgroud)

结果2

我知道地板向下,但我认为它只适用于十进制数字.

如何在通常四舍五入的同时得到后一种判断中的3种答案?

Phi*_*oss 10

PHP使用双精度浮点数.两个对数的结果都不能精确表示,因此除以它们的结果并不精确.你得到的结果接近,但略小于3.格式化时,它会四舍五入为3 echo.floor但是返回2.

你可以通过利用log(x, b) / log(y, b)相当于log(x, y)(对于任何基数b)的事实来避免不精确的划分.这为您提供了表达式log(238328, 62),它的浮点结果正好为3(自238328以来的正确结果pow(62, 3)).


Ken*_*iah 9

这是由于在PHP中抛出浮点数的方式.

有关详细信息,请参阅PHP手册的浮点数条目

解决方法是floor(round($value, 15));.这样做可以确保您的号码非常准确.


blo*_*ead 6

如果你var_dump你会看到"3"实际上是一个浮点数.这意味着它可能接近3并且四舍五入.如果你想要3,你将不得不使用姐妹功能,ceil.