Функция PHP Round - округлить до 2 дп? - PullRequest
3 голосов
/ 21 июня 2011

В PHP как мне округлить значение 22.04496, чтобы оно стало 22.05? Кажется, что раунд (22,04496,2) = 22,04. Разве это не должно быть 22.05 ??

Заранее спасибо

Ответы [ 5 ]

5 голосов
/ 21 июня 2011

вы можете сделать это используя ceil, умножив и разделив на степень 10.

echo ceil( 1.012345 * 1000)/1000;

1.013
3 голосов
/ 01 ноября 2016

Не делайте умножения внутри функции «потолок», «пол» или «круг»! Вы получите ошибки с плавающей запятой, и это может быть крайне непредсказуемым. Чтобы избежать этого, сделайте:

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);
}
2 голосов
/ 21 июня 2011

Функция округления в 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
0 голосов
/ 12 мая 2018

Я думаю, что лучший способ:

echo ceil(round($value * 100)) / 100;

Пример:

$value = 77.4;
echo ceil($value * 100) / 100; // 77.41 - WRONG!
echo ceil(round($value * 100)) / 100; // 77.4 - OK!
0 голосов
/ 21 июня 2011

Почему это должно быть 22.05?Третье десятичное число равно меньше 5 , поэтому при округлении до 2 десятичных знаков округляется до 22.04

...