(PHP 8 >= 8.4.0)
BcMath\Number::round — Rounds an arbitrary precision number
$precision
= 0, RoundingMode $mode
= RoundingMode::HalfAwayFromZero): BcMath\Number
Returns the rounded value of $this to
specified precision
(number of digits after the decimal point).
precision
can also be negative or zero (default).
precision
Opcionalmente, el número de dígitos decimales a redondear.
mode
Returns the result as a new BcMath\Number object.
This method throws a ValueError if an invalid mode
is specified.
Ejemplo #1 BcMath\Number::round() example
<?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
Example of using BcMath\Number::round() with different precision
values
<?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
Example of using BcMath\Number::round() with different mode
values
<?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
Example of using BcMath\Number::round() with different mode
values
when specifying precision
<?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) }