Round: примеры (PHP)

Округление чисел в PHP: функция round и ее применение
Раздел: Математические функции
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); // 4
3
4
4
С указанием точности
echo round(1.95583, 2); // 1.96
echo round(5.045, 2);   // 5.05
echo round(5.055, 2);   // 5.06
1.96
5.05
5.06
С отрицательной точностью
echo round(12345, -3); // 12000
echo round(12500, -3); // 13000
echo round(123.45, -1); // 120
12000
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);  // 9
10
9
8
9

Похожие функции в PHP

ceil и floor

ceil всегда округляет вверх, floor всегда вниз. Не поддерживают точность и режимы.

echo ceil(4.3);  // 5
echo floor(4.9); // 4
number_format

Форматирует число с разделителями тысяч и указанием десятичных знаков, возвращает строку. Удобно для вывода.

echo number_format(1234.567, 2, ',', ' '); // 1 234,57
sprintf

Форматирует строку с числом, позволяет задавать точность. Результат - строка.

echo sprintf("%.2f", 1.23456); // 1.23
Выбор функции

round применяется для математического округления. ceil/floor для одностороннего округления. number_format и sprintf для форматированного вывода.

Аналоги в других языках

Round в Python

Функция round ведет себя иначе при округлении .5 (банковское округление). Есть модуль decimal.

print(round(2.5))  # 2
print(round(3.5))  # 4

Round в Javascript

Метод Math.round округляет до ближайшего целого, нет параметра точности. Для точности используют умножение/деление.

Math.round(2.5); // 3
Math.round(2.49); // 2

Round в 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.3
0.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

PHP 8.0

Функция round стала выдавать ошибку при передаче неверного режима округления. Ранее молчаливо использовался PHP_ROUND_HALF_UP.

// PHP 7
round(5.5, 0, 99); // 6
// PHP 8
round(5.5, 0, 99); // ValueError
PHP 7.2

Добавлены константы PHP_ROUND_HALF_EVEN и PHP_ROUND_HALF_ODD.

Совместимость

Код, использующий числовые значения режимов (1,2,3,4), продолжает работать, но лучше использовать именованные константы.

Расширенные примеры

Округление денежных сумм
Пример php
$price = 19.99;
$tax = $price * 0.2; // 3.998
$total = round($price + $tax, 2);
echo $total; // 23.99
23.99
Округление до кратного
Пример php
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
Статистическая обработка
Пример php
$data = [4.7, 5.1, 6.2, 5.8];
$average = array_sum($data) / count($data);
echo round($average, 1); // 5.4
Округление с пользовательской логикой
Пример php
function 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
Сравнение режимов
Пример php
$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

PHP round function comments

En
Round Rounds a float