bcscale

(PHP 4, PHP 5, PHP 7, PHP 8)

bcscale设置/获取所有 bc math 函数的默认小数点保留位数

说明

bcscale(int $scale): int

设置所有 bc math 函数在未设定情况下的小数点保留位数。

bcscale(null $scale = null): int

获取当前的小数点保留位数。

参数

scale

小数点保留位数。

返回值

设置的时候,返回之前的小数点保留位数。否则就是返回当前的位数。

更新日志

版本 说明
8.0.0 现在 scale 可以为 null。
7.3.0 现在 bcscale() 不仅可以设置,还可以获取当前的小数点保留位数。 用于设置的时候,现在会返回之前的位数。 之前 scale 是强制的参数, 且 bcscale() 总是返回 true

示例

示例 #1 bcscale() 示例

<?php

// 默认小数点位数: 3
bcscale(3);
echo
bcdiv('105', '6.55957'); // 16.007

// 不调用 bcscale() 也一样
echo bcdiv('105', '6.55957', 3); // 16.007

?>

add a note add a note

User Contributed Notes 4 notes

up
22
mwgamera at gmail dot com
17 years ago
These functions DO NOT round off your values. No arbitrary precision libraries do it this way. It stops calculating after reaching scale of decimal places, which mean that your value is cut off after scale number of digits, not rounded. To do the rounding use something like this:
<?php
       
function bcround($number, $scale=0) {
               
$fix = "5";
                for (
$i=0;$i<$scale;$i++) $fix="0$fix";
               
$number = bcadd($number, "0.$fix", $scale+1);
                return   
bcdiv($number, "1.0",    $scale);
        }
?>
up
14
sicerwork at aliyun dot com
7 years ago
Executing bcsacle() will change the scale value of fpm.conf, not only the current process.
up
4
ravenswd at gmail dot com
12 years ago
Simple, easy way to remove excess trailing zeros using rtrim:
<php>
  // $total is the result of a bcmath calculation
  if ( strpos($total, '.') !== false ):
    $total = rtrim($total, '0');
    $total = rtrim($total, '.');
  endif;
</php>
up
4
herslyadam at gmail dot com
10 years ago
edited bcround function with negative number support:
<?php
function bcround($number, $scale=0) {
    if(
$scale < 0) $scale = 0;
   
$sign = '';
    if(
bccomp('0', $number, 64) == 1) $sign = '-';
   
$increment = $sign . '0.' . str_repeat('0', $scale) . '5';
   
$number = bcadd($number, $increment, $scale+1);
    return
bcadd($number, '0', $scale);
}
?>
To Top