$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)
}
Числа с плавающей точкой представляются в двоичном виде только с конечным количеством разрядов для мантиссы и порядка. При превышении этого количества происходит переполнение. В результате иногда PHP (а также другие языки) не считают два числа действительно равными, так как они могут отличаться в самом последнем разряде.
Для того чтобы обойти эту трудность, вместо проверки равенства $a == $b следует обеспечить очень небольшую разность ($delta) между первым и вторым числом. Размер этой дельты должен быть меньше разницы между двумя числами, которую вы хотите обеспечить. Затем для получения абсолютного значения разности вызывается функция abs().