Добрый день! есть 2 переменных $a и $b когда выводишь на экран через var_dump выводит
float(108.681)
float(108.681)
но когда используем if , как то странно получается
if($a==$b)
echo "true";
elseif($a>$b)
echo "a bolshe b";
выводит "a bloshe b"
как это понять кто может сказать ?)
1. Соц Сеть - 22 Мая, 2017 - 15:29:56 - перейти к сообщению
2. Мелкий - 22 Мая, 2017 - 15:41:48 - перейти к сообщению
Потому что ieee 754. Потому что float.
Единственно верный способ определить равенство пары float - это определить некоторый интервал, на котором ваша задача допускает их считать эквивалентными. И сравнивать в пределах этой величины.
if (abs($a - $b) < 0.001) равны в пределах тысячных долей.
Единственно верный способ определить равенство пары float - это определить некоторый интервал, на котором ваша задача допускает их считать эквивалентными. И сравнивать в пределах этой величины.
if (abs($a - $b) < 0.001) равны в пределах тысячных долей.
3. Соц Сеть - 22 Мая, 2017 - 16:07:47 - перейти к сообщению
я кажется нашел способ делаем так
if(number_format((float)$a,3)<=number_format((float)$b,3))
echo "true";
else
echo "false";
выводит true , как думаете такой метод нормальный ?
if(number_format((float)$a,3)<=number_format((float)$b,3))
echo "true";
else
echo "false";
выводит true , как думаете такой метод нормальный ?
4. Мелкий - 22 Мая, 2017 - 16:36:35 - перейти к сообщению
Моя подпись как никогда уместна.
С.Макконнелл пишет:
Если вы не знаете, почему это работает, вероятно, оно и не работает на самом деле.
5. Vladimir Kheifets - 24 Мая, 2017 - 07:49:11 - перейти к сообщению
Соц Сеть пишет:
я кажется нашел способ делаем так
if(number_format((float)$a,3)<=number_format((float)$b,3))
echo "true";
else
echo "false";
выводит true , как думаете такой метод нормальный ?
if(number_format((float)$a,3)<=number_format((float)$b,3))
echo "true";
else
echo "false";
выводит true , как думаете такой метод нормальный ?
Добрый день! Результат функции number_format - string.
Вы сравниваете две string переменные. Компилятор за Вас преобразует string в float .
Думаю это не лучшее решение.
Было правильнее, как Вам посоветовали “верный способ определить равенство пары float - это определить некоторый интервал”.