bcscale

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

bcscale设置或获取所有 bc 数学函数的默认 scale 参数

描述

bcscale(int $scale): int

为所有后续调用 bc 数学函数设置默认 scale 参数,这些函数没有显式指定 scale 参数。

bcscale(null $scale = null): int

获取当前 scale 因子。

参数

scale

scale 因子。

返回值

作为设置器使用时返回旧的 scale。否则返回当前 scale。

变更日志

版本 描述
8.0.0 scale 现在可以为空。
7.3.0 bcscale() 现在可以用来获取当前 scale 因子;作为设置器使用时,它现在返回旧的 scale 值。以前,scale 是必需的,并且 bcscale() 始终返回 true

范例

范例 #1 bcscale() 示例

<?php

// 默认 scale:3
bcscale(3);
echo
bcdiv('105', '6.55957'); // 16.007

// 这是在没有 bcscale() 的情况下相同的结果
echo bcdiv('105', '6.55957', 3); // 16.007

?>

添加说明

用户贡献的说明 4 个说明

23
mwgamera at gmail dot com
16 年前
这些函数不会对您的值进行四舍五入。没有任意精度库以这种方式工作。它在达到小数位数的 scale 后停止计算,这意味着您的值在 scale 位数后被截断,而不是四舍五入。要进行四舍五入,请使用以下类似的方法
<?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);
}
?>
16
sicerwork at aliyun dot com
7 年前
执行 bcsacle() 将更改 fpm.conf 的 scale 值,而不仅仅是当前进程。
6
ravenswd at gmail dot com
12 年前
使用 rtrim 删除多余尾随零的简单方法
<php>
// $total 是 bcmath 计算的结果
if ( strpos($total, '.') !== false )
$total = rtrim($total, '0');
$total = rtrim($total, '.');
endif;
</php>
5
herslyadam at gmail dot com
10 年前
编辑了 bcround 函数,支持负数
<?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