BC 数学 函数
在线手册:中文  英文

bcdiv

(PHP 4, PHP 5)

bcdivDivide two arbitrary precision numbers

说明

string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )

Divides the left_operand by the right_operand.

参数

left_operand

The left operand, as a string.

right_operand

The right operand, as a string.

scale

此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。

返回值

Returns the result of the division as a string, or NULL if right_operand is 0.

范例

Example #1 bcdiv() example

<?php

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

?>

参见


BC 数学 函数
在线手册:中文  英文

用户评论:

Anonymous (2010-09-26 10:05:22)

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:

<?php

function bcdiv_cust$first$second$scale )
{
    
$res $first $second;
    return 
round$res$scale );
}

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

?>

no at answer dot com (2008-07-05 13:06:25)

If you don't have bcmath installed and you need to use bcdiv() with a defined precision / scale you may need this function:
if( !function_exists( "bcdiv" ) )
{
function bcdiv( $first, $second, $scale = 0 )
{
$res = $first / $second;
return round( $res, $scale );
}
}

MM (2008-01-18 03:29:14)

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 (2007-08-29 07:56:00)

<?php
 
//converting in to required precision of decimal points
$resultbcdiv(89.99999999997,2.57865741235478,2);
 echo 
"$result";  // 34.90 result with 2 decimal points
?>

cristianDOTzuddas]NOSPAM[gmailDOTcom (2005-07-24 05:10:00)

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;
}
?>

-----
Cristian
www.CodeFlower.com

易百教程