(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()
в разных режимах mode
до точности 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"