Метод ceil округляет целые числа типа double

145
25 декабря 2018, 16:20

Всем добрый день.

Версия PHP 5.6.37

Есть такой код

$n = ceil(99 * ((10 / 100) * (10 / 100)));

в ходе расчетов получаем просто 1

но ceil округляет его до 2

я понимаю что тип полученный в ходе расчетов double и возможно с этим связан данный баг, но к примеру такой вот код

$n = ceil((double)1.00);

или такой

$n = ceil(100 * 0.01);

работает как надо и возвращает 1.

Если ли какие ни будь идеи почему это происходит? И можно ли как то это пофиксить?

Answer 1

Попробуй выполнить код

$n = 100 * ((10 / 100) * (10 / 100)); printf("%.18f\n",$n);

И посмотрите результат.

У Вас число с плавающей запятой, а такие числа не могут точно представлять все рациональные числа. Поэтому результат целочисленного преобразования всегда имеет неопределенность в отношении одной единицы.

READ ALSO
Что я делаю не так с запросами SQL в LARAVEL?

Что я делаю не так с запросами SQL в LARAVEL?

Собственно, вот моя функция контроля флуда

164
Несколько sql запросов

Несколько sql запросов

Всем ПриветВопрос может и банальный но решения пока не нашел

150
Как связать 2 таблицы список пользователей и список видео

Как связать 2 таблицы список пользователей и список видео

В одной таблице список пользователей (поля: id, логин, пароль, права), а вторая это таблица с видеоТо есть будет штук 10 видео и у разных пользователей...

239