Php 日志和 floor 函数奇怪的行为
Php log and floor function strange behavior
我的问题如下:
log(1000,10)
returns 3
,但 floor(log(1000,10))
returns 2
。如何解决这个问题?
我的php版本是5.6.30-0+deb8u1.
因为 log(1000)
类似于 2.9999999999999996 并且 floor() 函数将数字向下舍入为最接近的整数
如果你想要 3 个,请使用 round 而不是 floor
可能与浮点精度有关。您可以改用 log10(1000)。
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 中的不同结果(如对您问题的评论中指出的那样)与 scalar type declaration, a new feature in PHP 7 (try playing with strict mode to find out more, eg. https://3v4l.org/KVCol 有关).
我的问题如下:
log(1000,10)
returns 3
,但 floor(log(1000,10))
returns 2
。如何解决这个问题?
我的php版本是5.6.30-0+deb8u1.
因为 log(1000)
类似于 2.9999999999999996 并且 floor() 函数将数字向下舍入为最接近的整数
如果你想要 3 个,请使用 round 而不是 floor
可能与浮点精度有关。您可以改用 log10(1000)。
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 中的不同结果(如对您问题的评论中指出的那样)与 scalar type declaration, a new feature in PHP 7 (try playing with strict mode to find out more, eg. https://3v4l.org/KVCol 有关).