В PHP, как бы я округлить значение 22.04496, чтобы он стал 22.05? Кажется, что раунд (22.04496,2) = 22.04. Если это не 22.05 ??
заранее спасибо
вы можете сделать это с использованием ceil и умножения и деления на мощность 10.
echo ceil( 1.012345 * 1000)/1000; 1.013
Круглая функция PHP может обрабатывать дополнительный аргумент, который контролирует выполнение округления: http://php.net/manual/en/function.round.php
Примеры из ссылки:
echo round(9.5, 0, PHP_ROUND_HALF_UP); // 10 echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9 echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10 echo round(9.5, 0, PHP_ROUND_HALF_ODD); // 9
Не делайте размножения внутри потолочной, напольной или круглой функции! Вы получите ошибки с плавающей запятой, и это может быть крайне непредсказуемо. Чтобы этого избежать:
function ceiling($value, $precision = 0) { $offset = 0.5; if ($precision !== 0) $offset /= pow(10, $precision); $final = round($value + $offset, $precision, PHP_ROUND_HALF_DOWN); return ($final == -0 ? 0 : $final); }
Например, ceiling(2.2200001, 2)
даст 2.23
.
Основываясь на комментариях, я добавил также свою функцию наполовину, так как у нее есть аналогичные проблемы:
function flooring($value, $precision = 0) { $offset = -0.5; if ($precision !== 0) $offset /= pow(10, $precision); $final = round($value + $offset, $precision, PHP_ROUND_HALF_UP); return ($final == -0 ? 0 : $final); }
Почему это должно быть 22.05
? Третье десятичное число меньше 5 , поэтому, когда вы округлите его до 2 десятичной точности, округлите его до 22.04