kot2566
@kot2566

Почему число не равно себе?

$tmp1 = 14.28;
$tmp2 = 2.04 * 7;
    
// if ($tmp1 !== $tmp2)
if ($tmp1 != $tmp2)
{
    $t[] = $tmp1;
    $t[] = $tmp2;
    var_dump($t);
}
else {
    echo 'equal';
}


Вывод:
array(2) {
  [0]=>
  float(14.28)
  [1]=>
  float(14.28)
}


Объясните, почему числа не равны?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 4
vaut
@vaut
Потому что нельзя сравнивать на равенства числа с плавающей запятой.
Числа с плавающей точкой представляются в двоичном виде только с конечным количеством разрядов для мантиссы и порядка. При превышении этого количества происходит переполнение. В результате иногда PHP (а также другие языки) не считают два числа действительно равными, так как они могут отличаться в самом последнем разряде.

Для того чтобы обойти эту трудность, вместо проверки равенства $a == $b следует обеспечить очень небольшую разность ($delta) между первым и вторым числом. Размер этой дельты должен быть меньше разницы между двумя числами, которую вы хотите обеспечить. Затем для получения абсолютного значения разности вызывается функция abs().
Ответ написан
Комментировать
sswwssww
@sswwssww
Попробуй округлить tmp2 до двух знаков после запятой, они станут равны.
Ответ написан
Комментировать
DevMan
@DevMan
потому что с флоатами работают иначе.
https://3v4l.org/ruM0e
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы