Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (4)

Лучшие ответы пользователя

Все ответы (1)
  • Как сравнить тип данных double/float в условии?

    @gelirgwenn
    Вы некорректно сравниваете числа типа 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
    Ответ написан
    1 комментарий

Лучшие вопросы пользователя

Все вопросы (4)