round () возвращает избыточное количество десятичных знаков

Я написал много PHP-приложений и наткнулся на странный сценарий. Кажется, что функция round не работает в очень сложном наборе кода. Я пробовал много разных вещей, прежде чем звонить, но это просто не работает. Функция возвращает 0.56000000000000001, когда дано round($val,2), с $val=0.5600, Это должно, очевидно, вернуть 0,56.

Я изменил свой код для использования number_format($val,2,',',''), Кажется, это решило проблему, но теперь я предпочитаю второй мой код.

Должен ли я заменить раунд с number_format везде? У кого-нибудь были похожие ошибки с round?

Также следует отметить, что это, похоже, связано с PhpExcel, который используется в данном случае. https://github.com/PHPOffice/PHPExcel/issues/237

0

Решение

Там нет необходимости заменить round с number_format, Вы могли бы использовать round с флагом, чтобы округлить вниз.

Выберите, что лучше для приложения.

  • Вы округлили float? использование round
  • Вы хотите отформатировать число и группу тысячами? использование number_format
<?php
$number = '0.5600';
echo round((float)$number, 2, PHP_ROUND_HALF_DOWN);

https://eval.in/297781

2

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

Проблема в том, что не каждое десятичное число может быть представлено точно в стандартной переменной с плавающей запятой. Это очень распространенная проблема, ваша не уникальна. Если вам нужно точное представление, то то, что вы делаете, то есть преобразование плавающей запятой в строку, будет достаточно.

Некоторые другие решения:

  • перерабатывать == с плавающей точкой в <= или же >=
  • перерабатывать == к толерантности, например b–ε ≤ a ≤ b+ε, с ε некоторая константа или значение относительно |a| или же |b| или оба
0

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