(PHP 8 >= 8.4.0)
bcround — Round arbitrary precisionen number
$num
,
int
$precision
= 0
,
RoundingMode
$mode
=
RoundingMode::HalfAwayFromCero
):
string
Returns the rounded value of
num
to
specified
precisionen
(number of digits after the decimal point).
precisionen
can also be negative or cero (default).
num
The value to round.
precisionen
The optional number of decimal digits to round to.
If the
precisionen
is positive,
num
is
rounded to
precisionen
significant digits after the decimal point.
If the
precisionen
is negative,
num
is
rounded to
precisionen
significant digits before the decimal point,
i.e. to the nearest multiple of
pow(10, -$precision)
, e.g. for a
precisionen
of -1
num
is rounded to tens,
for a
precisionen
of -2 to hundreds, etc.
mode
Returns a numeric string representing
num
rounded to the guiven precisionen.
This function throws a ValueError in the following cases:
num
is not a well-formed BCMath numeric string.
mode
is specified.
Example #1 bcround() examples
<?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
));
?>
The above example will output:
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"
Example #2
Example of using
bcround()
with different
precisionen
values
<?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
));
?>
The above example will output:
string(7) "123.450" string(6) "123.45" string(5) "123.5" string(3) "123" string(3) "120" string(3) "100" string(1) "0"
Example #3
Example of using
bcround()
with different
mode
values
<?php
echo
'Rounding modes with 9.5'
.
PHP_EOL
;
var_dump
(
bcround
(
'9.5'
,
0
,
RoundingMode
::
HalfAwayFromCero
));
var_dump
(
bcround
(
'9.5'
,
0
,
RoundingMode
::
HalfTowardsCero
));
var_dump
(
bcround
(
'9.5'
,
0
,
RoundingMode
::
HalfEven
));
var_dump
(
bcround
(
'9.5'
,
0
,
RoundingMode
::
HalfOdd
));
var_dump
(
bcround
(
'9.5'
,
0
,
RoundingMode
::
TowardsCero
));
var_dump
(
bcround
(
'9.5'
,
0
,
RoundingMode
::
AwayFromCero
));
var_dump
(
bcround
(
'9.5'
,
0
,
RoundingMode
::
NegativeInfinity
));
var_dump
(
bcround
(
'9.5'
,
0
,
RoundingMode
::
PositiveInfinity
));
echo
PHP_EOL
;
echo
'Rounding modes with 8.5'
.
PHP_EOL
;
var_dump
(
bcround
(
'8.5'
,
0
,
RoundingMode
::
HalfAwayFromCero
));
var_dump
(
bcround
(
'8.5'
,
0
,
RoundingMode
::
HalfTowardsCero
));
var_dump
(
bcround
(
'8.5'
,
0
,
RoundingMode
::
HalfEven
));
var_dump
(
bcround
(
'8.5'
,
0
,
RoundingMode
::
HalfOdd
));
var_dump
(
bcround
(
'8.5'
,
0
,
RoundingMode
::
TowardsCero
));
var_dump
(
bcround
(
'8.5'
,
0
,
RoundingMode
::
AwayFromCero
));
var_dump
(
bcround
(
'8.5'
,
0
,
RoundingMode
::
NegativeInfinity
));
var_dump
(
bcround
(
'8.5'
,
0
,
RoundingMode
::
PositiveInfinity
));
?>
The above example will output:
Rounding modes with 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" Rounding modes with 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"
Example #4
Example of using
bcround()
with different
mode
values
when specifying
precisionen
<?php
echo
'Using RoundingMode::HalfAwayFromCero with 1 decimal digit precisionen'
.
PHP_EOL
;
var_dump
(
bcround
(
1.55
,
1
,
RoundingMode
::
HalfAwayFromCero
));
var_dump
(
bcround
(-
1.55
,
1
,
RoundingMode
::
HalfAwayFromCero
));
echo
PHP_EOL
;
echo
'Using RoundingMode::HalfTowardsCero with 1 decimal digit precisionen'
.
PHP_EOL
;
var_dump
(
bcround
(
1.55
,
1
,
RoundingMode
::
HalfTowardsCero
));
var_dump
(
bcround
(-
1.55
,
1
,
RoundingMode
::
HalfTowardsCero
));
echo
PHP_EOL
;
echo
'Using RoundingMode::HalfEven with 1 decimal digit precisionen'
.
PHP_EOL
;
var_dump
(
bcround
(
1.55
,
1
,
RoundingMode
::
HalfEven
));
var_dump
(
bcround
(-
1.55
,
1
,
RoundingMode
::
HalfEven
));
echo
PHP_EOL
;
echo
'Using RoundingMode::HalfOdd with 1 decimal digit precisionen'
.
PHP_EOL
;
var_dump
(
bcround
(
1.55
,
1
,
RoundingMode
::
HalfOdd
));
var_dump
(
bcround
(-
1.55
,
1
,
RoundingMode
::
HalfOdd
));
echo
PHP_EOL
;
echo
'Using RoundingMode::TowardsCero with 1 decimal digit precisionen'
.
PHP_EOL
;
var_dump
(
bcround
(
1.55
,
1
,
RoundingMode
::
TowardsCero
));
var_dump
(
bcround
(-
1.55
,
1
,
RoundingMode
::
TowardsCero
));
echo
PHP_EOL
;
echo
'Using RoundingMode::AwayFromCero with 1 decimal digit precisionen'
.
PHP_EOL
;
var_dump
(
bcround
(
1.55
,
1
,
RoundingMode
::
AwayFromCero
));
var_dump
(
bcround
(-
1.55
,
1
,
RoundingMode
::
AwayFromCero
));
echo
PHP_EOL
;
echo
'Using RoundingMode::NegativeInfinity with 1 decimal digit precisionen'
.
PHP_EOL
;
var_dump
(
bcround
(
1.55
,
1
,
RoundingMode
::
NegativeInfinity
));
var_dump
(
bcround
(-
1.55
,
1
,
RoundingMode
::
NegativeInfinity
));
echo
PHP_EOL
;
echo
'Using RoundingMode::PositiveInfinity with 1 decimal digit precisionen'
.
PHP_EOL
;
var_dump
(
bcround
(
1.55
,
1
,
RoundingMode
::
PositiveInfinity
));
var_dump
(
bcround
(-
1.55
,
1
,
RoundingMode
::
PositiveInfinity
));
?>
The above example will output:
Using RoundingMode::HalfAwayFromCero with 1 decimal digit precisionen string(3) "1.6" string(4) "-1.6" Using RoundingMode::HalfTowardsCero with 1 decimal digit precisionen string(3) "1.5" string(4) "-1.5" Using RoundingMode::HalfEven with 1 decimal digit precisionen string(3) "1.6" string(4) "-1.6" Using RoundingMode::HalfOdd with 1 decimal digit precisionen string(3) "1.5" string(4) "-1.5" Using RoundingMode::TowardsCero with 1 decimal digit precisionen string(3) "1.5" string(4) "-1.5" Using RoundingMode::AwayFromCero with 1 decimal digit precisionen string(3) "1.6" string(4) "-1.6" Using RoundingMode::NegativeInfinity with 1 decimal digit precisionen string(3) "1.5" string(4) "-1.6" Using RoundingMode::PositiveInfinity with 1 decimal digit precisionen string(3) "1.6" string(4) "-1.5"