Я хочу сравнить два плавания в PHP, как в этом примере кода:
$a = 0.17;
$b = 1 - 0.83; //0.17
if($a == $b ){
echo 'a and b are same';
}
else {
echo 'a and b are not same';
}
В этом коде это возвращает результат else
условие вместо if
условие, даже при том, что $a
и $b
то же. Там какой-либо специальный путь состоит в том, чтобы обработать/сравнить плавания в PHP?
Если да затем помогите мне решить эту проблему.
Или есть ли проблема с моей конфигурацией сервера?
Если вы сделаете это так, они должны быть такими же. Но обратите внимание, что характерной чертой значений с плавающей запятой является то, что вычисления, которые кажутся приводящими к одному и тому же значению, не обязательно должны быть идентичными. Таким образом, если $ a
является литералом .17
и $ b
прибывает туда посредством вычисления, вполне может быть, что они разные, хотя оба отображают одинаковое значение .
Обычно вы никогда не сравниваете значения с плавающей запятой на предмет равенства, подобного этому, вам нужно использовать наименьшее допустимое различие:
if (abs(($a-$b)/$b) < 0.00001) {
echo "same";
}
Что-то вроде этого.
Сначала прочтите красное предупреждение в руководстве . Вы никогда не должны сравнивать числа с плавающей запятой на равенство. Вам следует использовать технику эпсилон.
Например:
if (abs($a-$b) < PHP_FLOAT_EPSILON) { … }
где PHP_FLOAT_EPSILON
- константа, представляющая очень маленькое число (вы должны определить его в старых версиях PHP до 7.2)