BcMath\Number::round

(PHP 8 >= 8.4.0)

BcMath\Number::roundRounds an arbitrary precision number

Descripción

public BcMath\Number::round(int $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).

Parámetros

precision

Opcionalmente, el número de dígitos decimales a redondear.

mode
Specifies the rounding mode. For more information about modes, see RoundingMode.

Valores devueltos

Returns the result as a new BcMath\Number object.

Errores/Excepciones

This method throws a ValueError if an invalid mode is specified.

Ejemplos

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)
}

Ver también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top