logging — Php log и странная функция пола

Моя проблема заключается в следующем:
log(1000,10) возвращается 3, но floor(log(1000,10)) возвращается 2, Как исправить эту проблему?

Моя phpversion 5.6.30-0 + deb8u1.

2

Решение

Из 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).

2

Другие решения

Так как log(1000) что-то вроде 2.9999999999999996 и функция floor () округляет число ВНИЗ до ближайшего целого числа

если вы хотите иметь 3, используйте круглые, а не напольные

6

Это может быть связано с точностью поплавка. Вместо этого вы можете использовать log10 (1000).

-1
По вопросам рекламы [email protected]