Вы некорректно сравниваете числа типа float. Все числа хранятся в двоичном представлении на компьютере, так уж заведено, выбрана такая система счисления, потому что информацию в виде нулей и единиц легче обрабатывать и легче делать чипы и т.п.
Так вот некоторые числа не имеют точного представления в двоичной системе. Например, 0,2 имеет вид примерно такой 0,2000000033..... Соответственно, при сравнении в лоб, вы не сможете гарантировать корректный результат. Вы можете, к примеру, пробовать сравнивать сравнивать разницу с допустимой абсолютной погрешностью:
if (abs($x – $y) < 0.0001) {
// Do something...
}
Недостаток данного метода описан
здесь, а также другие способы сравнения.
Я бы вам рекомендовал перевести float в целое число или строку. В первом случае вы будете сравнивать два целых числа и у вас не будет проблем, во втором - с помощью функции
number_format и заданной точности вы преобразуете число в строку, а далее можете сравнивать строки, содержащие числа, с помощью функции
bccomp или аналога:
$x = 0.200000000646456546;
$y = 0.200000000676790909;
$results = ($x == $y);
var_dump($results); // bool(false)
$results = bccomp(number_format($x, 5), number_format($y, 5));
var_dump($results); // int(0) - are equal