(PHP 8 >= 8.4.0)
BcMath\Number::round — Redondea un número de precisión arbitraria
$precision
= 0, RoundingMode $mode
= RoundingMode::HalfAwayFromZero): BcMath\Number
Devuelve el valor redondeado de $this
a la precisión
especificada
(el número de dígitos después de la coma decimal).
precision
puede ser también negativo o nulo (por omisión).
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 el resultado en forma de un nuevo objeto BcMath\Number.
Este método lanza una ValueError si un mode
inválido es especificado.
Ejemplo #1 Ejemplo de BcMath\Number::round()
<?php
var_dump(
new BcMath\Number('3.4')->round(),
new BcMath\Number('3.5')->round(),
new BcMath\Number('3.6')->round(),
new BcMath\Number('3.6')->round(0),
new BcMath\Number('5.045')->round(2),
new BcMath\Number('5.055')->round(2),
new BcMath\Number('345')->round(-2),
new BcMath\Number('345')->round(-3),
new BcMath\Number('678')->round(-2),
new BcMath\Number('678')->round(-3),
);
?>
El resultado del ejemplo sería:
object(BcMath\Number)#2 (2) { ["value"]=> string(1) "3" ["scale"]=> int(0) } object(BcMath\Number)#3 (2) { ["value"]=> string(1) "4" ["scale"]=> int(0) } object(BcMath\Number)#4 (2) { ["value"]=> string(1) "4" ["scale"]=> int(0) } object(BcMath\Number)#5 (2) { ["value"]=> string(1) "4" ["scale"]=> int(0) } object(BcMath\Number)#6 (2) { ["value"]=> string(4) "5.05" ["scale"]=> int(2) } object(BcMath\Number)#7 (2) { ["value"]=> string(4) "5.06" ["scale"]=> int(2) } object(BcMath\Number)#8 (2) { ["value"]=> string(3) "300" ["scale"]=> int(0) } object(BcMath\Number)#9 (2) { ["value"]=> string(1) "0" ["scale"]=> int(0) } object(BcMath\Number)#10 (2) { ["value"]=> string(3) "700" ["scale"]=> int(0) } object(BcMath\Number)#11 (2) { ["value"]=> string(4) "1000" ["scale"]=> int(0) }
Ejemplo #2
Ejemplo de uso de BcMath\Number::round() con diferentes valores de precisión
<?php
$number = new BcMath\Number('123.45');
var_dump(
$number->round(3),
$number->round(2),
$number->round(1),
$number->round(0),
$number->round(-1),
$number->round(-2),
$number->round(-3),
);
?>
El resultado del ejemplo sería:
object(BcMath\Number)#2 (2) { ["value"]=> string(6) "123.45" ["scale"]=> int(2) } object(BcMath\Number)#3 (2) { ["value"]=> string(6) "123.45" ["scale"]=> int(2) } object(BcMath\Number)#4 (2) { ["value"]=> string(5) "123.5" ["scale"]=> int(1) } object(BcMath\Number)#5 (2) { ["value"]=> string(3) "123" ["scale"]=> int(0) } object(BcMath\Number)#6 (2) { ["value"]=> string(3) "120" ["scale"]=> int(0) } object(BcMath\Number)#7 (2) { ["value"]=> string(3) "100" ["scale"]=> int(0) } object(BcMath\Number)#8 (2) { ["value"]=> string(1) "0" ["scale"]=> int(0) }
Ejemplo #3
Ejemplo de uso de BcMath\Number::round() con diferentes valores de mode
<?php
echo 'Rounding modes with 9.5' . PHP_EOL;
$number = new BcMath\Number('9.5');
var_dump(
$number->round(0, RoundingMode::HalfAwayFromZero),
$number->round(0, RoundingMode::HalfTowardsZero),
$number->round(0, RoundingMode::HalfEven),
$number->round(0, RoundingMode::HalfOdd),
$number->round(0, RoundingMode::TowardsZero),
$number->round(0, RoundingMode::AwayFromZero),
$number->round(0, RoundingMode::NegativeInfinity),
$number->round(0, RoundingMode::PositiveInfinity),
);
echo PHP_EOL;
echo 'Rounding modes with 8.5' . PHP_EOL;
$number = new BcMath\Number('8.5');
var_dump(
$number->round(0, RoundingMode::HalfAwayFromZero),
$number->round(0, RoundingMode::HalfTowardsZero),
$number->round(0, RoundingMode::HalfEven),
$number->round(0, RoundingMode::HalfOdd),
$number->round(0, RoundingMode::TowardsZero),
$number->round(0, RoundingMode::AwayFromZero),
$number->round(0, RoundingMode::NegativeInfinity),
$number->round(0, RoundingMode::PositiveInfinity),
);
?>
El resultado del ejemplo sería:
Rounding modes with 9.5 object(BcMath\Number)#3 (2) { ["value"]=> string(2) "10" ["scale"]=> int(0) } object(BcMath\Number)#5 (2) { ["value"]=> string(1) "9" ["scale"]=> int(0) } object(BcMath\Number)#7 (2) { ["value"]=> string(2) "10" ["scale"]=> int(0) } object(BcMath\Number)#9 (2) { ["value"]=> string(1) "9" ["scale"]=> int(0) } object(BcMath\Number)#11 (2) { ["value"]=> string(1) "9" ["scale"]=> int(0) } object(BcMath\Number)#13 (2) { ["value"]=> string(2) "10" ["scale"]=> int(0) } object(BcMath\Number)#15 (2) { ["value"]=> string(1) "9" ["scale"]=> int(0) } object(BcMath\Number)#17 (2) { ["value"]=> string(2) "10" ["scale"]=> int(0) } Rounding modes with 8.5 object(BcMath\Number)#1 (2) { ["value"]=> string(1) "9" ["scale"]=> int(0) } object(BcMath\Number)#15 (2) { ["value"]=> string(1) "8" ["scale"]=> int(0) } object(BcMath\Number)#13 (2) { ["value"]=> string(1) "8" ["scale"]=> int(0) } object(BcMath\Number)#11 (2) { ["value"]=> string(1) "9" ["scale"]=> int(0) } object(BcMath\Number)#9 (2) { ["value"]=> string(1) "8" ["scale"]=> int(0) } object(BcMath\Number)#7 (2) { ["value"]=> string(1) "9" ["scale"]=> int(0) } object(BcMath\Number)#5 (2) { ["value"]=> string(1) "8" ["scale"]=> int(0) } object(BcMath\Number)#3 (2) { ["value"]=> string(1) "9" ["scale"]=> int(0) }
Ejemplo #4
Ejemplo de uso de BcMath\Number::round() con diferentes valores de mode
especificando precisión
<?php
$positive = new BcMath\Number('1.55');
$negative = new BcMath\Number('-1.55');
echo 'Using RoundingMode::HalfAwayFromZero with 1 decimal digit precision' . PHP_EOL;
var_dump(
$positive->round(1, RoundingMode::HalfAwayFromZero),
$negative->round(1, RoundingMode::HalfAwayFromZero),
);
echo PHP_EOL;
echo 'Using RoundingMode::HalfTowardsZero with 1 decimal digit precision' . PHP_EOL;
var_dump(
$positive->round(1, RoundingMode::HalfTowardsZero),
$negative->round(1, RoundingMode::HalfTowardsZero),
);
echo PHP_EOL;
echo 'Using RoundingMode::HalfEven with 1 decimal digit precision' . PHP_EOL;
var_dump(
$positive->round(1, RoundingMode::HalfEven),
$negative->round(1, RoundingMode::HalfEven),
);
echo PHP_EOL;
echo 'Using RoundingMode::HalfOdd with 1 decimal digit precision' . PHP_EOL;
var_dump(
$positive->round(1, RoundingMode::HalfOdd),
$negative->round(1, RoundingMode::HalfOdd),
);
echo PHP_EOL;
echo 'Using RoundingMode::TowardsZero with 1 decimal digit precision' . PHP_EOL;
var_dump(
$positive->round(1, RoundingMode::TowardsZero),
$negative->round(1, RoundingMode::TowardsZero),
);
echo PHP_EOL;
echo 'Using RoundingMode::AwayFromZero with 1 decimal digit precision' . PHP_EOL;
var_dump(
$positive->round(1, RoundingMode::AwayFromZero),
$negative->round(1, RoundingMode::AwayFromZero),
);
echo PHP_EOL;
echo 'Using RoundingMode::NegativeInfinity with 1 decimal digit precision' . PHP_EOL;
var_dump(
$positive->round(1, RoundingMode::NegativeInfinity),
$negative->round(1, RoundingMode::NegativeInfinity),
);
echo PHP_EOL;
echo 'Using RoundingMode::PositiveInfinity with 1 decimal digit precision' . PHP_EOL;
var_dump(
$positive->round(1, RoundingMode::PositiveInfinity),
$negative->round(1, RoundingMode::PositiveInfinity),
);
?>
El resultado del ejemplo sería:
Using RoundingMode::HalfAwayFromZero with 1 decimal digit precision object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.6" ["scale"]=> int(1) } object(BcMath\Number)#5 (2) { ["value"]=> string(4) "-1.6" ["scale"]=> int(1) } Using RoundingMode::HalfTowardsZero with 1 decimal digit precision object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.5" ["scale"]=> int(1) } object(BcMath\Number)#6 (2) { ["value"]=> string(4) "-1.5" ["scale"]=> int(1) } Using RoundingMode::HalfEven with 1 decimal digit precision object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.6" ["scale"]=> int(1) } object(BcMath\Number)#7 (2) { ["value"]=> string(4) "-1.6" ["scale"]=> int(1) } Using RoundingMode::HalfOdd with 1 decimal digit precision object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.5" ["scale"]=> int(1) } object(BcMath\Number)#8 (2) { ["value"]=> string(4) "-1.5" ["scale"]=> int(1) } Using RoundingMode::TowardsZero with 1 decimal digit precision object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.5" ["scale"]=> int(1) } object(BcMath\Number)#9 (2) { ["value"]=> string(4) "-1.5" ["scale"]=> int(1) } Using RoundingMode::AwayFromZero with 1 decimal digit precision object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.6" ["scale"]=> int(1) } object(BcMath\Number)#10 (2) { ["value"]=> string(4) "-1.6" ["scale"]=> int(1) } Using RoundingMode::NegativeInfinity with 1 decimal digit precision object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.5" ["scale"]=> int(1) } object(BcMath\Number)#11 (2) { ["value"]=> string(4) "-1.6" ["scale"]=> int(1) } Using RoundingMode::PositiveInfinity with 1 decimal digit precision object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.6" ["scale"]=> int(1) } object(BcMath\Number)#12 (2) { ["value"]=> string(4) "-1.5" ["scale"]=> int(1) }