В языке программирования есть несколько видов округления.
1 математическое округление — когда округление происходит в ближайшую сторону
2 в большую сторону
3 в меньшую сторону
В PHP для округления чисел применяются следующие функции:
- round – округление до ближайшего значения
- ceil – округление до ближайшего значения в большую сторону
- floor – округление до ближайшего значения в меньшую сторону
Все функции, если им не передать дополнительных параметров будут производить округление до целого числа, например:
|
1 2 3 4 5 |
<?php echo round(3.888888); // к ближайшему значению; echo ceil(3.3333333); // ceil - в большую сторону; echo floor(3.8333333); //floor - в меньшую сторону'; ?> |
Функция round
По умолчанию функция round производит округление до целого числа, согласно математическим правилам округления чисел.
|
1 2 3 4 5 6 7 8 |
<?php echo round(193.8); // 194 echo round(193.83); // 194 echo round(193.839); // 194 echo round(1.7); // 2 echo round(1.4); // 1 echo round(19387654.8666639); // 194 ?> |
Округление числа до заданного количества знаков после запятой
Существует возможность уточнения: будет ли число округляться до целого числа, или до заданного количества знаков после запятой (для этого необходимо передать второй параметр), но это уточнение (параметр) принимает только функция round;
Рассмотрим, как отработает функция на конкретном примере:
|
1 2 3 4 5 6 |
<?php $x = 193.8393; echo round($x, 1); // 193.8 echo round($x, 2); // 193.84 echo round($x, 3); // 193.839 ?> |
Второй параметр может быть отрицательным
|
1 2 3 4 5 6 |
<?php $x = 193.8393; echo round($x, -1); // 190 echo round($x, -2); // 200 echo round($x, -3); // 0 - значение не определено, вышли за диапазон ?> |
Способ округления
Функция round может принимать еще 1 параметр, отвечающий за способ округления
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 десятичных знаков в сторону ближайшего нечетного знака.
Функция floor
floor() — округление в меньшую сторону
Принимает один параметр для передачи числа. Передает целое число, округлённое в меньшую сторону.
|
1 2 3 4 5 6 7 |
<?php echo floor(3.99); // 3 echo floor(3.023);// 3 echo floor(4.4); // 4 echo floor(9.0); // 9 echo floor(12345678912345.999999999999999999999999999999999); // 12345678912346 - обратить внимание ?> |
https://web-answers.ru/php/matematika-php-round-ne-rabotaet-dolzhnym-obrazom.htm
Функция ceil
ceil() — округление в большую сторону
Принимает один параметр для передачи числа. Передает целое число, округлённое в большую сторону.
|
1 2 3 4 5 6 |
<?php echo floor(3.99); // 3 echo floor(3.023);// 3 echo floor(4.4); // 4 echo floor(9.0); // 9 ?> |
Дополнительно:
ceil() и floor() имеют только один параметр и не смогут округлить число до заданной точности, но есть способ, позволяющий округлить число в большую или меньшую сторону до заданного количества знаков после запятой.
В таких случаях можно выполнить умножение числа, чтобы затем округлить нужным способом. Например, число нужно округлить до большего значения с двумя знаками после запятой.
|
1 2 3 4 |
<?php $x = 123.8313; echo ceil($x * 100) / 100; // 123.84 ?> |
В результате получим 123.84, хотя аналогичное округление функцией round в данном случае вернуло бы 123.83.
Так же можно поступить, если нужно округлить до меньшего значения с заданной точностью:
|
1 2 3 4 |
<?php $x = 123.8393; echo floor($x * 100) / 100; // 123.83 ?> |
В статье частично использовался материал с сайтов:
http://abcvg.com/17862-funkcii-round-ceil-i-floor-okruglenie-chisla-na-php.html
http://xn--80afqpaigicolm.xn--p1ai/php/okruglenie-chisel-v-php/
https://space-base.ru/library/?book=66
https://web-answers.ru/php/matematika-php-round-ne-rabotaet-dolzhnym-obrazom.htm