В PHP для округления чисел применяются следующие функции:
Функция round($num, $precision)
возвращает округлённое значение $num
с указанной точностью $precision
(количество цифр после запятой).
echo round(111.455); // 111
// Один знак после запятой
echo round(111.455, 1); // 111.5
// Два знака после запятой
echo round(111.455, 2); // 111.46
Также функция round() может округлять целую часть числа, для этого нужно указать отрицательный $precision
.
// Один знак перед запятой
echo round(111.455, -1); // 110
// Два знака перед запятой
echo round(111.455, -2); // 100
Третьим аргументом функции можно повлиять способ округления.
PHP_ROUND_HALF_UP |
Округляет от нуля, когда следующий знак находится посередине. То есть округляет 1.5 в 2 и -1.5 в -2. |
PHP_ROUND_HALF_DOWN |
Округляет к нулю, когда следующий знак находится посередине. То есть округляет 1.5 в 1 и -1.5 в -1. |
PHP_ROUND_HALF_EVEN |
Округляет до ближайшего чётного значения, когда следующий знак находится посередине. То есть округляет 1.5 и 2.5 в 2. |
PHP_ROUND_HALF_ODD |
Округляет до ближайшего нечётного значения, когда следующий знак находится посередине. То есть округляет 1.5 в 1 и 2.5 в 3. |
Функция ceil($num)
– всегда округляет число в большую сторону.
Функция floor()
– округляет число в меньшую сторону.
Функция округляет число до ближайшего целого числа или до ближайшего значения с шагом 0.5.
Если требуется всегда выводить числа после запятой (.00), то можно применить функцию number_format().
Функция number_format не просто форматирует, но округляет.
Например:
$num = "100.378";
echo number_format($num, 2, '.', '');
Выведет не 100.37, а 100.38
Поправьте плиз в статье.
$number = (string)$number;
if($number === '') {
$number = '0';
}
if(strpos($number, '.') === false) {
$number .= '.';
}
$number_arr = explode('.', $number);
$decimals = substr($number_arr[1], 0, $total_decimals);
if($decimals === false) {
$decimals = '0';
}
$return = '';
if($total_decimals == 0) {
$return = $number_arr[0];
} else {
if(strlen($decimals) < $total_decimals) {
$decimals = str_pad($decimals, $total_decimals, '0', STR_PAD_RIGHT);
}
$return = $number_arr[0] . '.' . $decimals;
}
return $return;
}
echo _round(10.49609090, 2);
>> 10.49