Не делайте умножения внутри функции «потолок», «пол» или «круг»! Вы получите ошибки с плавающей запятой, и это может быть крайне непредсказуемым. Чтобы избежать этого, сделайте:
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
.
Основываясь на комментариях, я также добавил свою функцию floor , так как у нее похожие проблемы:
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);
}