(PHP 8 >= 8.4.0)
bcround — Округляет число произвольной точности
$num
, int $precision
= 0, RoundingMode $mode
= RoundingMode::HalfAwayFromZero): string
Возвращает округлённое значение num
с указанной точностью precision
(количество цифр после десятичной точки).
Значение параметра precision
также может быть отрицательным или нулём (по умолчанию).
num
Значение, которое требуется округлить.
precision
Необязательное количество десятичных знаков, до которых функция округлит число.
Функция округлит число num
до такого количества
значащих цифр после десятичной точки, которое указали в параметре
precision
,
если точность precision
положительна.
Функция округлит число num
до такого количества
значащих цифр перед десятичной точкой, которое указали в параметре
precision
,
если точность precision
отрицательна.
При отрицательном значении точности функция округляет число до следующего
кратного результата выражения pow(10, -$precision)
.
Число num
округляется до десятков,
если точность precision
равна -1,
до сотен, если точность precision
равна -2, и т. д.
mode
Возвращает числовую строку, представляющую число num
,
округлённое с заданной точностью.
Функция выбрасывает ошибку ValueError в следующих случаях:
num
не является корректно сформированной числовой строкой BCMath.scale
находится за пределами допустимого диапазона.Пример #1 Пример использования функции bcround()
<?php
var_dump(bcround('3.4'));
var_dump(bcround('3.5'));
var_dump(bcround('3.6'));
var_dump(bcround('3.6', 0));
var_dump(bcround('5.045', 2));
var_dump(bcround('5.055', 2));
var_dump(bcround('345', -2));
var_dump(bcround('345', -3));
var_dump(bcround('678', -2));
var_dump(bcround('678', -3));
?>
Результат выполнения приведённого примера:
string(1) "3" string(1) "4" string(1) "4" string(1) "4" string(4) "5.05" string(4) "5.06" string(3) "300" string(1) "0" string(3) "700" string(4) "1000"
Пример #2
Пример использования функции bcround() с различными значениями параметра precision
<?php
$number = '123.45';
var_dump(bcround($number, 3));
var_dump(bcround($number, 2));
var_dump(bcround($number, 1));
var_dump(bcround($number, 0));
var_dump(bcround($number, -1));
var_dump(bcround($number, -2));
var_dump(bcround($number, -3));
?>
Результат выполнения приведённого примера:
string(7) "123.450" string(6) "123.45" string(5) "123.5" string(3) "123" string(3) "120" string(3) "100" string(1) "0"
Пример #3
Пример использования функции bcround() с различными значениями параметра mode
<?php
echo 'Режимы округления с 9.5' . PHP_EOL;
var_dump(bcround('9.5', 0, RoundingMode::HalfAwayFromZero));
var_dump(bcround('9.5', 0, RoundingMode::HalfTowardsZero));
var_dump(bcround('9.5', 0, RoundingMode::HalfEven));
var_dump(bcround('9.5', 0, RoundingMode::HalfOdd));
var_dump(bcround('9.5', 0, RoundingMode::TowardsZero));
var_dump(bcround('9.5', 0, RoundingMode::AwayFromZero));
var_dump(bcround('9.5', 0, RoundingMode::NegativeInfinity));
var_dump(bcround('9.5', 0, RoundingMode::PositiveInfinity));
echo PHP_EOL;
echo 'Режимы округления с 8.5' . PHP_EOL;
var_dump(bcround('8.5', 0, RoundingMode::HalfAwayFromZero));
var_dump(bcround('8.5', 0, RoundingMode::HalfTowardsZero));
var_dump(bcround('8.5', 0, RoundingMode::HalfEven));
var_dump(bcround('8.5', 0, RoundingMode::HalfOdd));
var_dump(bcround('8.5', 0, RoundingMode::TowardsZero));
var_dump(bcround('8.5', 0, RoundingMode::AwayFromZero));
var_dump(bcround('8.5', 0, RoundingMode::NegativeInfinity));
var_dump(bcround('8.5', 0, RoundingMode::PositiveInfinity));
?>
Результат выполнения приведённого примера:
Режимы округления с 9.5 string(2) "10" string(1) "9" string(2) "10" string(1) "9" string(1) "9" string(2) "10" string(1) "9" string(2) "10" Режимы округления с 8.5 string(1) "9" string(1) "8" string(1) "8" string(1) "9" string(1) "8" string(1) "9" string(1) "8" string(1) "9"
Пример #4
Пример использования функции bcround()
с различными значениями параметра precision
при указании параметра precision
<?php
echo 'Использование RoundingMode::HalfAwayFromZero с точностью до 1 десятичного знака' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfAwayFromZero));
var_dump(bcround(-1.55, 1, RoundingMode::HalfAwayFromZero));
echo PHP_EOL;
echo 'Использование RoundingMode::HalfTowardsZero с точностью до 1 десятичного знака' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfTowardsZero));
var_dump(bcround(-1.55, 1, RoundingMode::HalfTowardsZero));
echo PHP_EOL;
echo 'Использование RoundingMode::HalfEven с точностью до 1 десятичного знака' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfEven));
var_dump(bcround(-1.55, 1, RoundingMode::HalfEven));
echo PHP_EOL;
echo 'Использование RoundingMode::HalfOdd с точностью до 1 десятичного знака' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfOdd));
var_dump(bcround(-1.55, 1, RoundingMode::HalfOdd));
echo PHP_EOL;
echo 'Использование RoundingMode::TowardsZero с точностью до 1 десятичного знака' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::TowardsZero));
var_dump(bcround(-1.55, 1, RoundingMode::TowardsZero));
echo PHP_EOL;
echo 'Использование RoundingMode::AwayFromZero с точностью до 1 десятичного знака' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::AwayFromZero));
var_dump(bcround(-1.55, 1, RoundingMode::AwayFromZero));
echo PHP_EOL;
echo 'Использование RoundingMode::NegativeInfinity с точностью до 1 десятичного знака' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::NegativeInfinity));
var_dump(bcround(-1.55, 1, RoundingMode::NegativeInfinity));
echo PHP_EOL;
echo 'Использование RoundingMode::PositiveInfinity с точностью до 1 десятичного знака' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::PositiveInfinity));
var_dump(bcround(-1.55, 1, RoundingMode::PositiveInfinity));
?>
Результат выполнения приведённого примера:
Использование RoundingMode::HalfAwayFromZero с точностью до 1 десятичного знака string(3) "1.6" string(4) "-1.6" Использование RoundingMode::HalfTowardsZero с точностью до 1 десятичного знака string(3) "1.5" string(4) "-1.5" Использование RoundingMode::HalfEven с точностью до 1 десятичного знака string(3) "1.6" string(4) "-1.6" Использование RoundingMode::HalfOdd с точностью до 1 десятичного знака string(3) "1.5" string(4) "-1.5" Использование RoundingMode::TowardsZero с точностью до 1 десятичного знака string(3) "1.5" string(4) "-1.5" Использование RoundingMode::AwayFromZero с точностью до 1 десятичного знака string(3) "1.6" string(4) "-1.6" Использование RoundingMode::NegativeInfinity с точностью до 1 десятичного знака string(3) "1.5" string(4) "-1.6" Использование RoundingMode::PositiveInfinity с точностью до 1 десятичного знака string(3) "1.6" string(4) "-1.5"