(PHP 8 >= 8.4.0)
bcround — 將任意精度數字四捨五入
將 num
的值四捨五入到指定的 precision
(小數點後的位數)。precision
也可以是負數或零(預設值)。
num
要四捨五入的值。
precision
選擇性參數,要四捨五入的小數位數。
如果 precision
為正數,num
會四捨五入到小數點後 precision
個有效數字。
如果 precision
為負數,num
會四捨五入到小數點前 precision
個有效數字,也就是四捨五入到 pow(10, -$precision)
的最接近倍數。例如,precision
為 -1 時,num
會四捨五入到十位數;precision
為 -2 時,會四捨五入到百位數,依此類推。
mode(模式)
回傳一個表示 num
四捨五入到指定精度的數值字串。
範例 #1 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));
?>
上述範例將輸出:
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"
範例 #2 使用不同 precision
值的 bcround() 範例
<?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));
?>
上述範例將輸出:
string(7) "123.450" string(6) "123.45" string(5) "123.5" string(3) "123" string(3) "120" string(3) "100" string(1) "0"
範例 #3 使用 bcround() 搭配不同 mode
值的範例
<?php
echo 'Rounding modes with 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 'Rounding modes with 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));
?>
上述範例將輸出:
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"
範例 #4 在指定 precision
時,使用 bcround() 搭配不同 mode
值的範例
<?php
echo 'Using RoundingMode::HalfAwayFromZero with 1 decimal digit precision' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfAwayFromZero));
var_dump(bcround(-1.55, 1, RoundingMode::HalfAwayFromZero));
echo PHP_EOL;
echo 'Using RoundingMode::HalfTowardsZero with 1 decimal digit precision' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfTowardsZero));
var_dump(bcround(-1.55, 1, RoundingMode::HalfTowardsZero));
echo PHP_EOL;
echo 'Using RoundingMode::HalfEven with 1 decimal digit precision' . 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 precision' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::HalfOdd));
var_dump(bcround(-1.55, 1, RoundingMode::HalfOdd));
echo PHP_EOL;
echo 'Using RoundingMode::TowardsZero with 1 decimal digit precision' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::TowardsZero));
var_dump(bcround(-1.55, 1, RoundingMode::TowardsZero));
echo PHP_EOL;
echo 'Using RoundingMode::AwayFromZero with 1 decimal digit precision' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::AwayFromZero));
var_dump(bcround(-1.55, 1, RoundingMode::AwayFromZero));
echo PHP_EOL;
echo 'Using RoundingMode::NegativeInfinity with 1 decimal digit precision' . 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 precision' . PHP_EOL;
var_dump(bcround( 1.55, 1, RoundingMode::PositiveInfinity));
var_dump(bcround(-1.55, 1, RoundingMode::PositiveInfinity));
?>
上述範例將輸出:
Using RoundingMode::HalfAwayFromZero with 1 decimal digit precision string(3) "1.6" string(4) "-1.6" Using RoundingMode::HalfTowardsZero with 1 decimal digit precision string(3) "1.5" string(4) "-1.5" Using RoundingMode::HalfEven with 1 decimal digit precision string(3) "1.6" string(4) "-1.6" Using RoundingMode::HalfOdd with 1 decimal digit precision string(3) "1.5" string(4) "-1.5" Using RoundingMode::TowardsZero with 1 decimal digit precision string(3) "1.5" string(4) "-1.5" Using RoundingMode::AwayFromZero with 1 decimal digit precision string(3) "1.6" string(4) "-1.6" Using RoundingMode::NegativeInfinity with 1 decimal digit precision string(3) "1.5" string(4) "-1.6" Using RoundingMode::PositiveInfinity with 1 decimal digit precision string(3) "1.6" string(4) "-1.5"