@snake2
Сразу пишу legacy код

Что за странность в php?

foreach($order['goods'] as $good) {
    $weight += $good['weight'] * $good['count'];
}

if (round($order_weight, 2) < round($weight, 2)) {
    $order_weight = $weight;
}


if (round($order_weight, 2) < round($weight, 2)) {
Выполняется условно всегда
Есть условие
if ($weight == $order_weight) {
     var_dump('ok');
} else {
    var_dump($weight);
    var_dump($order_weight);
    var_dump(gettype($weight));
    var_dump(gettype($order_weight));
}

И раз 5, скрипт выведет ok, а на 6
Возвращает
float(53.57)
float(53.57)
string(6) "double"
string(6) "double"
Есть идеи почему они не равны?
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 2
vilinyh
@vilinyh
Warning
Comparison of floating point numbers
Because of the way floats are represented internally, you should not test two floats for equality.

https://www.php.net/manual/en/language.operators.c...
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
а если так?
$weight = round($weight, 2);
$order_weight = round($order_weight, 2);

if ($weight == $order_weight) {
     var_dump('ok');
} else {
    var_dump($weight);
    var_dump($order_weight);
    var_dump(gettype($weight));
    var_dump(gettype($order_weight));
}


чтобы точно небыло проблем для работы с числами используйте
https://www.php.net/manual/ru/book.gmp.php
или https://www.php.net/manual/ru/book.bc.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы