ScotlandPHP 2019

# bcdiv

(PHP 4, PHP 5, PHP 7)

bcdiv2个任意精度的数字除法计算

### 说明

bcdiv ( string `\$left_operand` , string `\$right_operand` [, int `\$scale` = int ] ) : string

`左操作数`除以`右操作数`

### 参数

`left_operand`

`right_operand`

``` scale```

### 范例

Example #1 bcdiv() 示例

``` <?phpecho bcdiv('105', '6.55957', 3);  // 16.007?> ```

### 参见

• bcmul() - 2个任意精度数字乘法计算

add a note

### User Contributed Notes 4 notes

Anonymous
8 years ago
``` The custom bcdiv function listed at the top of this page produces very different results from bcdiv, as it rounds instead of truncating the result. Consider the following:<?phpfunction bcdiv_cust( \$first, \$second, \$scale = 0 ){    \$res = \$first / \$second;    return round( \$res, \$scale );}echo bcdiv('1','2','0') . " vs. " bcdiv_cust('1','2','0');  // prints '0 vs. 1'?> ```
MM
11 years ago
``` Perhaps some one can find useful this function to compute the modular inverse of a integer (extended euclidean algorithm):  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;  }  // verify  \$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; ```
Gautam
11 years ago
``` <?php //converting in to required precision of decimal points\$result= bcdiv(89.99999999997,2.57865741235478,2); echo "\$result";  // 34.90 result with 2 decimal points?> ```
-6
cristianDOTzuddas]NOSPAM[gmailDOTcom
13 years ago
``` Decimal to binary conversion, using BC Math.Note: this function is VERY slow if the decimal number is too big!<?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;}?>-----Cristianwww.CodeFlower.com ```