bcdiv

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

bcdiv除两个任意精度的数

描述

bcdiv(string $num1, string $num2, ?int $scale = null): string

num1 除以 num2

参数

num1

被除数,作为字符串。

num2

除数,作为字符串。

scale

此可选参数用于设置结果中小数点后的位数。如果省略,它将默认为使用 bcscale() 函数全局设置的比例,或者如果没有设置则回退到 0

返回值

将除法的结果作为字符串返回,如果 num20 则返回 null

变更日志

版本 描述
8.0.0 scale 现在可以为空。

范例

范例 #1 bcdiv() 例子

<?php

echo bcdiv('105', '6.55957', 3); // 16.007

?>

参见

  • bcmul() - 乘以两个任意精度的数

添加备注

用户贡献的备注 4 个备注

-1
MM
16 年前
也许有人会发现此函数对计算整数的模逆(扩展欧几里得算法)有用

function invmod($a,$b) {
$n=$b;
$x=0; $lx=1; $y=1; $ly=0;
while ($b) {
$t=$b;
$q=bcdiv($a,$b,0);
$b=bcmod($a,$b);
$a=$t;
$t=$x; $x=bcsub($lx,bcmod(bcmul($q,$x),$n)); $lx=$t;
$t=$y; $y=bcsub($ly,bcmod(bcmul($q,$y),$n)); $ly=$t;
}
if (bccomp($lx,0) == -1)
$lx=bcadd($lx,$n);
return $lx;
}

// 验证

$n="2447995268898324993537772139997802321";
$t="64941057316178801556773346239351236811";
$m="123456789";
$i=invmod($t,$n);
// (t*m)*inv(t) is m
echo bcmod(bcmul(bcmod(bcmul($t,$m),$n),$i),$n) == $m;
-8
匿名
13 年前
此页面顶部列出的自定义 bcdiv 函数产生的结果与 bcdiv 非常不同,因为它对结果进行四舍五入而不是截断。考虑以下情况

<?php

function bcdiv_cust( $first, $second, $scale = 0 )
{
$res = $first / $second;
return
round( $res, $scale );
}

echo
bcdiv('1','2','0') . " vs. " bcdiv_cust('1','2','0'); // 打印 '0 vs. 1'

?>
-10
cristianDOTzuddas]NOSPAM[gmailDOTcom
19 年前
使用 BC Math 将十进制转换为二进制。
注意:如果十进制数太大,此函数将非常慢!

<?
function bc_decbin($dec_str) {
if (strlen($dec_str)>0) {
$bin_str = '';
do {
if (((int)$dec_str[strlen($dec_str)-1] % 2) === 0)
$bin_str .= '0';
else
$bin_str .= '1';

$dec_str = bcdiv($dec_str, '2');
} while ($dec_str!='0');

return strrev($bin_str);
}
else
return null;
}
?>

-----
Cristian
www.CodeFlower.com
-13
Gautam
16 年前
<?php
// 转换为所需的十进制小数精度
$result= bcdiv(89.99999999997,2.57865741235478,2);
echo
"$result"; // 34.90 结果保留两位小数
?>
To Top