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)
}


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

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

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

Войти через центр авторизации
Похожие вопросы
RecruitIT Москва
от 100 000 до 160 000 ₽
от 130 000 до 180 000 ₽
Сбер Москва
До 240 000 ₽
25 окт. 2020, в 17:30
39999 руб./за проект
25 окт. 2020, в 17:16
150000 руб./за проект
25 окт. 2020, в 17:09
19999 руб./за проект