Функция PHP Round – округляет до 2 дп?

В 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