Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 617 раз(а)
Потому что ieee 754. Потому что float.
Единственно верный способ определить равенство пары float - это определить некоторый интервал, на котором ваша задача допускает их считать эквивалентными. И сравнивать в пределах этой величины.
if (abs($a - $b) < 0.001) равны в пределах тысячных долей.
----- PostgreSQL DBA
Соц Сеть
Отправлено: 22 Мая, 2017 - 16:07:47
Посетитель
Покинул форум
Сообщений всего: 307
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
я кажется нашел способ делаем так
if(number_format((float)$a,3)<=number_format((float)$b,3))
echo "true";
else
echo "false";
выводит true , как думаете такой метод нормальный ?
Мелкий
Отправлено: 22 Мая, 2017 - 16:36:35
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 617 раз(а)
Моя подпись как никогда уместна.
С.Макконнелл пишет:
Если вы не знаете, почему это работает, вероятно, оно и не работает на самом деле.
----- PostgreSQL DBA
Vladimir Kheifets
Отправлено: 24 Мая, 2017 - 07:49:11
Частый посетитель
Покинул форум
Сообщений всего: 877
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Соц Сеть пишет:
я кажется нашел способ делаем так
if(number_format((float)$a,3)<=number_format((float)$b,3))
echo "true";
else
echo "false";
выводит true , как думаете такой метод нормальный ?
Добрый день! Результат функции number_format - string.
Вы сравниваете две string переменные. Компилятор за Вас преобразует string в float .
Думаю это не лучшее решение.
Было правильнее, как Вам посоветовали “верный способ определить равенство пары float - это определить некоторый интервал”.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.