Задать вопрос
motto13
@motto13
Вечно молодой

Как исправить ошибку Implicit conversion from float (int) to int loses precision?

PHP Version 8.1.9
$days = abs(strtotime(date("Y-m-d", $sd)) - strtotime(date("Y-m-d", $snow))) / 3600 / 24 >> 0;

Выдает:
Implicit conversion from float 203.95833333333334  to int loses precision

Как исправить ошибку?
  • Вопрос задан
  • 2315 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Этот код какой-то эстет писал.
Для получения количества полных дней вместо битовых выкрутасов надо просто использовать floor()
Хотя в данном случае надо использовать ceil, ну или round. Потому что эти 5 сотых дня происходят явно от прехода на летнее время. И с конверсией в int теряется 1 день.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Делать не неявное (implicit), а явное (explicit) преобразование.
$days = floor(abs(strtotime(date("Y-m-d", $sd)) - strtotime(date("Y-m-d", $snow))) / 3600 / 24);
или
$days = (int)(abs(strtotime(date("Y-m-d", $sd)) - strtotime(date("Y-m-d", $snow))) / 3600 / 24);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы