PHP Conference Japan 2024

bcdiv

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

bcdiv將兩個任意精度數字相除

說明

bcdiv(字串 $num1, 字串 $num2, ?整數 $scale = null): 字串

num1 除以 num2

參數

num1

被除數,以字串表示。

num2

除數,以字串表示。

scale
此參數用於設定結果中小數點後的位數。如果是 null,它將預設為使用 bcscale() 設定的預設精度,或者回退到 bcmath.scale INI 指令的值。

返回值

以字串形式返回除法的結果。

錯誤/異常

在下列情況下,此函數會拋出 ValueError 異常:

  • num1num2 不是格式正確的 BCMath 數字字串。
  • scale 超出有效範圍。

如果 num20,此函數會拋出 DivisionByZeroError 異常。

更新日誌

版本 說明
8.0.0 scale 現在可以為 null。
8.0.0 除以 0 現在會拋出 DivisionByZeroError 異常,而不是返回 null

範例

範例 #1 bcdiv() 範例

<?php

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

?>

參見

  • bcdivmod() - 取得任意精度數字的商數和餘數
  • bcmod() - 取得任意精度數字的餘數
  • bcmul() - 乘以兩個任意精度數字

新增註釋

使用者貢獻的註釋 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;
To Top