(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.
mode указали недопустимый режим.Пример #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"