(PHP 4, PHP 5, PHP 7, PHP 8)
round — Округляет число с плавающей точкой
$num, int $precision = 0, int|RoundingMode $mode = RoundingMode::HalfAwayFromZero): float
Функция возвращает значение числа num,
которое округлила с точностью precision —
количество цифр после запятой.
Значение точности precision принимает отрицательные значения и ноль —
значение по умолчанию.
numЗначение, которое требуется округлить.
precisionНеобязательное количество десятичных знаков, до которых функция округлит число.
Функция округлит число num до такого количества
значащих цифр после десятичной точки, которое указали в параметре
precision,
если точность precision положительна.
Функция округлит число num до такого количества
значащих цифр перед десятичной точкой, которое указали в параметре
precision,
если точность precision отрицательна.
При отрицательном значении точности функция округляет число до следующего
кратного результата выражения pow(10, -$precision).
Число num округляется до десятков,
если точность precision равна -1,
до сотен, если точность precision равна -2, и т. д.
modeРежим округления устанавливают перечислением RoundingMode или константой из следующего списка:
| Константы | Описание |
|---|---|
PHP_ROUND_HALF_UP |
Округляет положительное число num в бо́льшую сторону,
а отрицательное в меньшую, превращая 1.5 в 2 и -1.5 в -2; стремится от нуля.
|
PHP_ROUND_HALF_DOWN |
Округляет положительное число num в меньшую сторону,
а отрицательное в бо́льшую, превращая 1.5 в 1 и -1.5 в -1; стремится к нулю.
|
PHP_ROUND_HALF_EVEN |
Округляет число num до ближайшего чётного значения,
превращая 1.5 и 2.5 в 2.
|
PHP_ROUND_HALF_ODD |
Округляет число num до ближайшего нечётного значения,
превращая 1.5 в 1 и 2.5 в 3.
|
Функция возвращает число с плавающей точкой (float),
которое получила путём округления входного числа до точности,
которую установили в параметре precision.
При недопустимом режиме mode функция
выбрасывает ошибку ValueError.
До PHP 8.4.0 для недопустимого режима без предупреждения устанавливалось значение PHP_ROUND_HALF_UP.
| Версия | Описание |
|---|---|
| 8.4.0 | Добавили четыре новые режима округления. |
| 8.4.0 |
Функция теперь выбрасывает ошибку ValueError,
если в параметр mode передали недопустимый режим округления.
|
| 8.0.0 |
Параметр num больше не принимает внутренние объекты,
которые поддерживают числовое преобразование.
|
Пример #1 Пример округления чисел функцией round()
<?php
var_dump(round(3.4));
var_dump(round(3.5));
var_dump(round(3.6));
var_dump(round(3.6, 0));
var_dump(round(5.045, 2));
var_dump(round(5.055, 2));
var_dump(round(345, -2));
var_dump(round(345, -3));
var_dump(round(678, -2));
var_dump(round(678, -3));
?>Результат выполнения приведённого примера:
float(3) float(4) float(4) float(4) float(5.05) float(5.06) float(300) float(0) float(700) float(1000)
Пример #2 Пример влияния параметра precision на числа с плавающей точкой
<?php
$number = 135.79;
var_dump(round($number, 3));
var_dump(round($number, 2));
var_dump(round($number, 1));
var_dump(round($number, 0));
var_dump(round($number, -1));
var_dump(round($number, -2));
var_dump(round($number, -3));
?>Результат выполнения приведённого примера:
float(135.79) float(135.79) float(135.8) float(136) float(140) float(100) float(0)
Пример #3 Пример влияния режима mode на округление чисел
<?php
echo 'Режимы округления с 9.5' . PHP_EOL;
var_dump(round(9.5, 0, PHP_ROUND_HALF_UP));
var_dump(round(9.5, 0, PHP_ROUND_HALF_DOWN));
var_dump(round(9.5, 0, PHP_ROUND_HALF_EVEN));
var_dump(round(9.5, 0, PHP_ROUND_HALF_ODD));
echo PHP_EOL;
echo 'Режимы округления с 8.5' . PHP_EOL;
var_dump(round(8.5, 0, PHP_ROUND_HALF_UP));
var_dump(round(8.5, 0, PHP_ROUND_HALF_DOWN));
var_dump(round(8.5, 0, PHP_ROUND_HALF_EVEN));
var_dump(round(8.5, 0, PHP_ROUND_HALF_ODD));
?>Результат выполнения приведённого примера:
Режимы округления с 9.5 float(10) float(9) float(10) float(9) Режимы округления с 8.5 float(9) float(8) float(8) float(9)
Пример #4
Пример округления чисел с режимом mode и точностью precision
<?php
echo 'Округление с точностью до 1 знака в режиме PHP_ROUND_HALF_UP' . PHP_EOL;
var_dump(round( 1.55, 1, PHP_ROUND_HALF_UP));
var_dump(round(-1.55, 1, PHP_ROUND_HALF_UP));
echo PHP_EOL;
echo 'Округление с точностью до 1 знака в режиме PHP_ROUND_HALF_DOWN' . PHP_EOL;
var_dump(round( 1.55, 1, PHP_ROUND_HALF_DOWN));
var_dump(round(-1.55, 1, PHP_ROUND_HALF_DOWN));
echo PHP_EOL;
echo 'Округление с точностью до 1 знака в режиме PHP_ROUND_HALF_EVEN' . PHP_EOL;
var_dump(round( 1.55, 1, PHP_ROUND_HALF_EVEN));
var_dump(round(-1.55, 1, PHP_ROUND_HALF_EVEN));
echo PHP_EOL;
echo 'Округление с точностью до 1 знака в режиме PHP_ROUND_HALF_ODD' . PHP_EOL;
var_dump(round( 1.55, 1, PHP_ROUND_HALF_ODD));
var_dump(round(-1.55, 1, PHP_ROUND_HALF_ODD));
?>Результат выполнения приведённого примера:
Округление с точностью до 1 знака в режиме PHP_ROUND_HALF_UP float(1.6) float(-1.6) Округление с точностью до 1 знака в режиме PHP_ROUND_HALF_DOWN float(1.5) float(-1.5) Округление с точностью до 1 знака в режиме PHP_ROUND_HALF_EVEN float(1.6) float(-1.6) Округление с точностью до 1 знака в режиме PHP_ROUND_HALF_ODD float(1.5) float(-1.5)
Пример #5 Пример установки режима округления перечислением RoundingMode
<?php
foreach (RoundingMode::cases() as $mode) {
foreach ([
8.5,
9.5,
-3.5,
] as $number) {
printf("%-17s: %+.17g -> %+.17g\n", $mode->name, $number, round($number, 0, $mode));
}
echo "\n";
}
?>Результат выполнения приведённого примера:
HalfAwayFromZero : +8.5 -> +9 HalfAwayFromZero : +9.5 -> +10 HalfAwayFromZero : -3.5 -> -4 HalfTowardsZero : +8.5 -> +8 HalfTowardsZero : +9.5 -> +9 HalfTowardsZero : -3.5 -> -3 HalfEven : +8.5 -> +8 HalfEven : +9.5 -> +10 HalfEven : -3.5 -> -4 HalfOdd : +8.5 -> +9 HalfOdd : +9.5 -> +9 HalfOdd : -3.5 -> -3 TowardsZero : +8.5 -> +8 TowardsZero : +9.5 -> +9 TowardsZero : -3.5 -> -3 AwayFromZero : +8.5 -> +9 AwayFromZero : +9.5 -> +10 AwayFromZero : -3.5 -> -4 NegativeInfinity : +8.5 -> +8 NegativeInfinity : +9.5 -> +9 NegativeInfinity : -3.5 -> -4 PositiveInfinity : +8.5 -> +9 PositiveInfinity : +9.5 -> +10 PositiveInfinity : -3.5 -> -3