PHP日志和楼层功能奇怪的行为

时间:2017-08-15 07:13:48

标签: php logging floor

我的问题如下: log(1000,10)会返回3,但floor(log(1000,10))会返回2。如何解决这个问题?

我的phpversion是5.6.30-0 + deb8u1。

3 个答案:

答案 0 :(得分:6)

因为log(1000)类似于2.9999999999999996而floor()函数将数字向下舍入到最接近的整数

如果你想拥有3,请使用round而不是floor

答案 1 :(得分:2)

From a 13 year old comment at the PHP:log documentation:

$val = 1000000
$val2 = floor(log($val,10)) // gives a value of 5 for $val2 and not 6 as expected.
$val2 = floor(log10($val)) // gives the correct value.

所以你应该使用floor(log10(1000);

虽然我当然不是专家,但我认为PHP5和PHP7中的不同结果(正如您对问题的评论中所指出的)与{7}}有关,这是PHP 7中的一项新功能(尝试播放)用严格模式找出更多,例如scalar type declaration)。

答案 2 :(得分:-1)

它可能与浮动精度有关。您可以改用log10(1000)。