Round: примеры (PHP)
round(float num [, int precision [, int mode]]): floatФункция round в PHP
Функция round округляет число с плавающей точкой до указанной точности. Она используется для приведения чисел к удобному виду в финансовых расчетах, статистике, отображении данных.
round(float $num, int $precision = 0, int $mode = PHP_ROUND_HALF_UP): float
- $num - исходное число для округления (float или int).
- $precision - количество цифр после десятичной точки (может быть отрицательным). По умолчанию 0.
- $mode - режим округления:
- PHP_ROUND_HALF_UP - по умолчанию. Округление в большую сторону от нуля (0.5 → 1).
- PHP_ROUND_HALF_DOWN - округление в меньшую сторону к нулю (0.5 → 0).
- PHP_ROUND_HALF_EVEN - округление до ближайшего четного числа (2.5 → 2, 3.5 → 4).
- PHP_ROUND_HALF_ODD - округление до ближайшего нечетного числа (2.5 → 3, 3.5 → 3).
Примеры использования round
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 43 4 4
echo round(1.95583, 2); // 1.96
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.061.96 5.05 5.06
echo round(12345, -3); // 12000
echo round(12500, -3); // 13000
echo round(123.45, -1); // 12012000 13000 120
echo round(9.5, 0, PHP_ROUND_HALF_UP); // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD); // 910 9 8 9
Похожие функции в PHP
ceil всегда округляет вверх, floor всегда вниз. Не поддерживают точность и режимы.
echo ceil(4.3); // 5
echo floor(4.9); // 4Форматирует число с разделителями тысяч и указанием десятичных знаков, возвращает строку. Удобно для вывода.
echo number_format(1234.567, 2, ',', ' '); // 1 234,57Форматирует строку с числом, позволяет задавать точность. Результат - строка.
echo sprintf("%.2f", 1.23456); // 1.23round применяется для математического округления. ceil/floor для одностороннего округления. number_format и sprintf для форматированного вывода.
Аналоги в других языках
Round в Python
Функция round ведет себя иначе при округлении .5 (банковское округление). Есть модуль decimal.
print(round(2.5)) # 2
print(round(3.5)) # 4Round в Javascript
Метод Math.round округляет до ближайшего целого, нет параметра точности. Для точности используют умножение/деление.
Math.round(2.5); // 3
Math.round(2.49); // 2Round в MySQL
Функция ROUND работает аналогично PHP, второй параметр - точность.
SELECT ROUND(123.4567, 2); -- 123.46
SELECT ROUND(123.45, -1); -- 120В Python округление .5 к ближайшему четному. В JavaScript нет встроенной точности. MySQL функция работает внутри запросов.
Типичные ошибки
Числа с плавающей точкой в двоичном виде могут давать неожиданные результаты.
echo round(0.1 + 0.2, 1); // Ожидается 0.30.3
Но из-за двоичного представления 0.1 + 0.2 ≠ 0.3 точно. Лучше использовать целые числа или bcmath.
$value = 2.5;
echo round($value); // 3 (ожидается 2 при HALF_EVEN)3
По умолчанию используется PHP_ROUND_HALF_UP. Нужно явно указывать режим.
echo round(123.45, -1); // 120
echo round(123.45, -2); // 100Округление до десятков, сотен. Не всегда интуитивно.
Изменения в PHP
Функция round стала выдавать ошибку при передаче неверного режима округления. Ранее молчаливо использовался PHP_ROUND_HALF_UP.
// PHP 7
round(5.5, 0, 99); // 6
// PHP 8
round(5.5, 0, 99); // ValueErrorДобавлены константы PHP_ROUND_HALF_EVEN и PHP_ROUND_HALF_ODD.
Код, использующий числовые значения режимов (1,2,3,4), продолжает работать, но лучше использовать именованные константы.
Расширенные примеры
$price = 19.99;
$tax = $price * 0.2; // 3.998
$total = round($price + $tax, 2);
echo $total; // 23.9923.99
function round_to_multiple($number, $multiple) {
return round($number / $multiple) * $multiple;
}
echo round_to_multiple(127, 50); // 150
echo round_to_multiple(123, 10); // 120$data = [4.7, 5.1, 6.2, 5.8];
$average = array_sum($data) / count($data);
echo round($average, 1); // 5.4function round_custom($value, $precision, $threshold = 0.3) {
$fraction = $value - floor($value);
if ($fraction > $threshold) {
return ceil($value * pow(10, $precision)) / pow(10, $precision);
}
return floor($value * pow(10, $precision)) / pow(10, $precision);
}
echo round_custom(2.31, 1, 0.3); // 2.3
echo round_custom(2.35, 1, 0.3); // 2.4$numbers = [1.5, 2.5, 3.5, 4.5];
foreach ([PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, PHP_ROUND_HALF_ODD] as $mode) {
$results = array_map(fn($n) => round($n, 0, $mode), $numbers);
echo implode(', ', $results) . "\n";
}2, 3, 4, 5 1, 2, 3, 4 2, 2, 4, 4 1, 3, 3, 5