Округление чисел в PHP
В 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) – всегда округляет число в большую сторону.
echo ceil(1.1); // 2 echo ceil(1.5); // 2 echo ceil(1.6); // 2
round
Возвращает округлённое значение val с указанной точностью precision (количество цифр после запятой). Последняя может быть отрицательной или нулём (по умолчанию).
Замечание: PHP по умолчанию не может правильно обрабатывать строки типа «12,300.2». Для подробностей см. Преобразование строк в числа.
Список параметров
Количество десятичных знаков, до которых округлять
Используйте одну из этих констант для задания способа округления.
Константа | Описание |
---|---|
PHP_ROUND_HALF_UP | Округляет val в большую сторону от нуля до precision десятичных знаков, если следующий знак находится посередине. Т.е. округляет 1.5 в 2 и -1.5 в -2. |
PHP_ROUND_HALF_DOWN | Округляет val в меньшую сторону к нулю до precision десятичных знаков, если следующий знак находится посередине. Т.е. округляет 1.5 в 1 и -1.5 в -1. |
PHP_ROUND_HALF_EVEN | Округляет val до precision десятичных знаков в сторону ближайшего четного знака. |
PHP_ROUND_HALF_ODD | Округляет val до precision десятичных знаков в сторону ближайшего нечетного знака. |
Возвращаемые значения
Примеры
Пример #1 Пример использования round()
echo round ( 3.4 ); // 3
echo round ( 3.5 ); // 4
echo round ( 3.6 ); // 4
echo round ( 3.6 , 0 ); // 4
echo round ( 1.95583 , 2 ); // 1.96
echo round ( 1241757 , — 3 ); // 1242000
echo round ( 5.045 , 2 ); // 5.05
echo round ( 5.055 , 2 ); // 5.06
?>?php
Пример #2 Примеры использования параметра mode
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
?php
echo round ( 8.5 , 0 , PHP_ROUND_HALF_UP ); // 9
echo round ( 8.5 , 0 , PHP_ROUND_HALF_DOWN ); // 8
echo round ( 8.5 , 0 , PHP_ROUND_HALF_EVEN ); // 8
echo round ( 8.5 , 0 , PHP_ROUND_HALF_ODD ); // 9
?>
Пример #3 Примеры использования параметра mode с указанием точности
/* Использование PHP_ROUND_HALF_UP с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_UP ); // 1.6
echo round ( 1.54 , 1 , PHP_ROUND_HALF_UP ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_UP ); // -1.6
echo round (- 1.54 , 1 , PHP_ROUND_HALF_UP ); // -1.5
?php
/* Использование PHP_ROUND_HALF_DOWN с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_DOWN ); // 1.5
echo round ( 1.54 , 1 , PHP_ROUND_HALF_DOWN ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_DOWN ); // -1.5
echo round (- 1.54 , 1 , PHP_ROUND_HALF_DOWN ); // -1.5
/* Использование PHP_ROUND_HALF_EVEN с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_EVEN ); // 1.6
echo round ( 1.54 , 1 , PHP_ROUND_HALF_EVEN ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_EVEN ); // -1.6
echo round (- 1.54 , 1 , PHP_ROUND_HALF_EVEN ); // -1.5
/* Использование PHP_ROUND_HALF_ODD с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_ODD ); // 1.5
echo round ( 1.54 , 1 , PHP_ROUND_HALF_ODD ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_ODD ); // -1.5
echo round (- 1.54 , 1 , PHP_ROUND_HALF_ODD ); // -1.5
?>
Список изменений
Версия | Описание |
---|---|
5.3.0 | Был добавлен параметр mode . |
5.2.7 | Работа функции round() была изменена в соответствии со стандартом C99. |
Смотрите также
- ceil() — Округляет дробь в большую сторону
- floor() — Округляет дробь в меньшую сторону
- number_format() — Форматирует число с разделением групп
round
Returns the rounded value of num to specified precision (number of digits after the decimal point). precision can also be negative or zero (default).
Parameters
The optional number of decimal digits to round to.
If the precision is positive, num is rounded to precision significant digits after the decimal point.
If the precision is negative, num is rounded to precision significant digits before the decimal point, i.e. to the nearest multiple of pow(10, -$precision) , e.g. for a precision of -1 num is rounded to tens, for a precision of -2 to hundreds, etc.
Use one of the following constants to specify the mode in which rounding occurs.
Constants | Description |
---|---|
PHP_ROUND_HALF_UP | Rounds num away from zero when it is half way there, making 1.5 into 2 and -1.5 into -2. |
PHP_ROUND_HALF_DOWN | Rounds num towards zero when it is half way there, making 1.5 into 1 and -1.5 into -1. |
PHP_ROUND_HALF_EVEN | Rounds num towards the nearest even value when it is half way there, making both 1.5 and 2.5 into 2. |
PHP_ROUND_HALF_ODD | Rounds num towards the nearest odd value when it is half way there, making 1.5 into 1 and 2.5 into 3. |
Return Values
The value rounded to the given precision as a float .
Changelog
Examples
Example #1 round() examples
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 ));
?>?php
The above example will output:
float(3) float(4) float(4) float(4) float(5.05) float(5.06) float(300) float(0) float(700) float(1000)
Example #2 How precision affects a float
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 ));
?>
The above example will output:
float(135.79) float(135.79) float(135.8) float(136) float(140) float(100) float(0)
Example #3 mode examples
echo ‘Rounding modes with 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 ));
?php
echo PHP_EOL ;
echo ‘Rounding modes with 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 ));
?>
The above example will output:
Rounding modes with 9.5 float(10) float(9) float(10) float(9) Rounding modes with 8.5 float(9) float(8) float(8) float(9)
Example #4 mode with precision examples
echo ‘Using PHP_ROUND_HALF_UP with 1 decimal digit precision’ . PHP_EOL ;
var_dump ( round ( 1.55 , 1 , PHP_ROUND_HALF_UP ));
var_dump ( round (- 1.55 , 1 , PHP_ROUND_HALF_UP ));
?php
echo PHP_EOL ;
echo ‘Using PHP_ROUND_HALF_DOWN with 1 decimal digit precision’ . 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 ‘Using PHP_ROUND_HALF_EVEN with 1 decimal digit precision’ . 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 ‘Using PHP_ROUND_HALF_ODD with 1 decimal digit precision’ . PHP_EOL ;
var_dump ( round ( 1.55 , 1 , PHP_ROUND_HALF_ODD ));
var_dump ( round (- 1.55 , 1 , PHP_ROUND_HALF_ODD ));
?>
The above example will output:
Using PHP_ROUND_HALF_UP with 1 decimal digit precision float(1.6) float(-1.6) Using PHP_ROUND_HALF_DOWN with 1 decimal digit precision float(1.5) float(-1.5) Using PHP_ROUND_HALF_EVEN with 1 decimal digit precision float(1.6) float(-1.6) Using PHP_ROUND_HALF_ODD with 1 decimal digit precision float(1.5) float(-1.5)
See Also
- ceil() — Round fractions up
- floor() — Round fractions down
- number_format() — Format a number with grouped thousands