Моя проблема заключается в следующем:
log(1000,10)
возвращается 3
, но floor(log(1000,10))
возвращается 2
, Как исправить эту проблему?
Моя phpversion 5.6.30-0 + deb8u1.
Из 13-летнего комментария на PHP: журнал документации:
$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 (как указано в комментариях к вашему вопросу) связаны с объявление скалярного типа, новая функция в PHP 7 (попробуйте поиграть в строгом режиме, чтобы узнать больше, например. https://3v4l.org/KVCol).
Так как log(1000)
что-то вроде 2.9999999999999996 и функция floor () округляет число ВНИЗ до ближайшего целого числа
если вы хотите иметь 3, используйте круглые, а не напольные
Это может быть связано с точностью поплавка. Вместо этого вы можете использовать log10 (1000).