оператор if — сравнение с плавающей точкой в ​​PHP

У меня есть следующий код PHP, в котором я хочу сравнить два десятичных числа. Я прочитал в документации PHP, что числа с плавающей точкой имеют ограниченную точность.

$a = 0.0;

for ($i = 0; $i < 10; $i++) {
$a += 0.1;
}

var_dump($a);
echo gettype($a);

if ($a === 1.0) {
echo "IF";
} else {
echo "ELSE";
}

Когда я сравниваю переменную $ a с 1.0, она всегда возвращает false, и результатом будет ‘ELSE’. Мой вопрос заключается в том, как я могу заставить код выше работать должным образом.

1

Решение

Вы можете просто сделать это так:

// просто проверить, если это число с плавающей запятой, затем округлить его до 1 десятичного числа и сравнить

if(is_float($a)){
echo 'not a float';
$a = round($a,1);
}

и вывод будет «ЕСЛИ»

0

Другие решения

Этот вопрос задавался ранее, смотрите Сравнить поплавки в PHP.

По сути, вам нужно рассчитать разницу и посмотреть, достаточно ли она мала, чтобы быть приемлемой как «равная».

1

Попробуйте что-то вроде этого:

$a = 0.0;

for ($i = 0; $i < 10; $i++) {
$a += 0.1;


$a=number_format($a,1);
//echo gettype($a);
//echo $a.'<br>';
if (floatval($a) === 1.0)
echo "IF";
else
echo "ELSE";
}
1

Чтобы сделать сравнение, я бы усек $ a до одного десятичного знака, отформатировал $ a в строку с требуемой точностью и сравнил бы ее с «1.0».

Чтобы усечь $ я предлагаю читая этот ответ .

Или вы можете использовать $ a как целое число. Их вместо увеличения на 0,1 используют 1. И используют 10 в конечном сравнении.

1
По вопросам рекламы [email protected]