(PHP 8 >= 8.4.0)
bcround — Redondea un número de precisión arbitraria
$num
, int $precision
= 0, RoundingMode $mode
= RoundingMode::HalfAwayFromZero): string
Devuelve el valor redondeado de num
a
la precisión especificada precision
(número de dígitos después del punto decimal).
precision
puede ser también negativo o nulo (por omisión).
num
El valor a redondear.
precision
El número opcional de decimales a redondear.
Si el argumento precision
es positivo,
num
será redondeado utilizando el argumento
precision
para definir el número significativo
de dígitos después del punto decimal.
Si el argumento precision
es negativo,
num
será redondeado utilizando el argumento
precision
para definir el número significativo
de dígitos antes del punto decimal, i.e. el múltiplo más cercano
de pow(10, -$precision)
, i.e. para una
precision
de -1, num
será redondeado a 10, para una precision
de -2 a 100, etc.
mode
Devuelve una cadena numérica representando num
redondeado a la precisión dada.
Esta función lanza una ValueError en los siguientes casos:
num
no es una cadena numérica BCMath bien formada.mode
inválido es especificado.Ejemplo #1 Ejemplos de 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));
?>
El resultado del ejemplo sería:
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"
Ejemplo #2
Ejemplo de la utilización de bcround() con diferentes valores de 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));
?>
El resultado del ejemplo sería:
string(7) "123.450" string(6) "123.45" string(5) "123.5" string(3) "123" string(3) "120" string(3) "100" string(1) "0"
Ejemplo #3
Ejemplo de la utilización de bcround() con diferentes valores de mode
<?php
echo 'Modos de redondeo con 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 'Modos de redondeo con 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));
?>
El resultado del ejemplo sería:
Modos de redondeo con 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" Modos de redondeo con 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"
Ejemplo #4
Ejemplo de la utilización de bcround() con diferentes valores de mode
al especificar precision
<?php
echo 'Utilización de RoundingMode::HalfAwayFromZero con una precisión decimal de 1' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfAwayFromZero));
var_dump(bcround(-1.55, 1, RoundingMode::HalfAwayFromZero));
echo PHP_EOL;
echo 'Utilización de RoundingMode::HalfTowardsZero con una precisión decimal de 1' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfTowardsZero));
var_dump(bcround(-1.55, 1, RoundingMode::HalfTowardsZero));
echo PHP_EOL;
echo 'Utilización de RoundingMode::HalfEven con una precisión decimal de 1' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfEven));
var_dump(bcround(-1.55, 1, RoundingMode::HalfEven));
echo PHP_EOL;
echo 'Utilización de RoundingMode::HalfOdd con una precisión decimal de 1' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfOdd));
var_dump(bcround(-1.55, 1, RoundingMode::HalfOdd));
echo PHP_EOL;
echo 'Utilización de RoundingMode::TowardsZero con una precisión decimal de 1' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::TowardsZero));
var_dump(bcround(-1.55, 1, RoundingMode::TowardsZero));
echo PHP_EOL;
echo 'Utilización de RoundingMode::AwayFromZero con una precisión decimal de 1' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::AwayFromZero));
var_dump(bcround(-1.55, 1, RoundingMode::AwayFromZero));
echo PHP_EOL;
echo 'Utilización de RoundingMode::NegativeInfinity con una precisión decimal de 1' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::NegativeInfinity));
var_dump(bcround(-1.55, 1, RoundingMode::NegativeInfinity));
echo PHP_EOL;
echo 'Utilización de RoundingMode::PositiveInfinity con una precisión decimal de 1' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::PositiveInfinity));
var_dump(bcround(-1.55, 1, RoundingMode::PositiveInfinity));
?>
El resultado del ejemplo sería:
Utilización de RoundingMode::HalfAwayFromZero con una precisión decimal de 1 string(3) "1.6" string(4) "-1.6" Utilización de RoundingMode::HalfTowardsZero con una precisión decimal de 1 string(3) "1.5" string(4) "-1.5" Utilización de RoundingMode::HalfEven con una precisión decimal de 1 string(3) "1.6" string(4) "-1.6" Utilización de RoundingMode::HalfOdd con una precisión decimal de 1 string(3) "1.5" string(4) "-1.5" Utilización de RoundingMode::TowardsZero con una precisión decimal de 1 string(3) "1.5" string(4) "-1.5" Utilización de RoundingMode::AwayFromZero con una precisión decimal de 1 string(3) "1.6" string(4) "-1.6" Utilización de RoundingMode::NegativeInfinity con una precisión decimal de 1 string(3) "1.5" string(4) "-1.6" Utilización de RoundingMode::PositiveInfinity con una precisión decimal de 1 string(3) "1.6" string(4) "-1.5"