Я написал много 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
Там нет необходимости заменить round
с number_format
, Вы могли бы использовать round
с флагом, чтобы округлить вниз.
Выберите, что лучше для приложения.
float
? использование round
number_format
<?php
$number = '0.5600';
echo round((float)$number, 2, PHP_ROUND_HALF_DOWN);
Проблема в том, что не каждое десятичное число может быть представлено точно в стандартной переменной с плавающей запятой. Это очень распространенная проблема, ваша не уникальна. Если вам нужно точное представление, то то, что вы делаете, то есть преобразование плавающей запятой в строку, будет достаточно.
Некоторые другие решения:
==
с плавающей точкой в <=
или же >=
==
к толерантности, например b–ε ≤ a ≤ b+ε
, с ε
некоторая константа или значение относительно |a|
или же |b|
или оба