PHP Conference Japan 2024

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 超出有效范围,则此函数会抛出 ValueError 异常。

变更日志

版本 描述
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 条笔记

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);
}
?>
sicerwork at aliyun dot com
7 年前
执行 bcsacle() 将更改 fpm.conf 的 scale 值,而不仅仅是当前进程。
ravenswd at gmail dot com
12 年前
使用 rtrim 删除多余尾随零的简单方法
<php>
// $total 是 bcmath 计算的结果
if ( strpos($total, '.') !== false )
$total = rtrim($total, '0');
$total = rtrim($total, '.');
endif;
</php>
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