介绍使用PHP计算时,会遇到高精度数字带来的问题。好在PHP提供了BC系统函数。下面将常用的BC函数进行封装,并做一个简单的例子。代码示例leftNumber=$leftNumber;$this->rightNumber=$rightNumber;$this->setScale();}/***设置数字*@param$name*@param$value*@returnnull*/publicfunction__set($name,$value){if(!isset($this->$name)){return无效的;}$this->$name=$value;}/***获取数字*@param$name*@returnnull*/publicfunction__get($name){if(isset($this->$name)){return$this->$name;}else{返回空值;}}/***执行方法*@param$functionName*@paramstring$arguments*@returnnull*/publicfunction__call($functionName,$arguments){if(!method_exists($this,$functionName)){返回空值;}//设置小数位数需要参数,其他不需要if(isset($arguments[0])){return$this->$functionName($arguments[0]);}返回$this->$functionName();}/***设置所有bc数学函数保留的默认小数位数*http://php.net/manual/zh/function.bcscale.php*@paramint$scale*/privatefunctionsetScale($scale=2){bcscale($scale);/***添加2个任意精度数字*http://php.net/manual/zh/function.bcadd.php*@returnstring*/privatefunctionadd(){returnbcadd($this->leftNumber,$this->rightNumber);}}/***2个任意精度数字的减法*http://php.net/manual/zh/function.bcsub.php*@returnstring*/privatefunctionsub(){returnbcsub($this->leftNumber,$this->rightNumber);}}/***2个任意精度数的乘法计算*http://php.net/manual/zh/function.bcmul.php*@returnstring*/privatefunctionmul(){returnbcmul($this->leftNumber,$this->rightNumber);}/***2个任意精度数的除法计算*http://php.net/manual/zh/function.bcdiv.php*@returnstring*/privatefunctiondiv(){returnbcdiv($this->leftNumber,$this->rightNumber);}}/***比较两个任意精度数*相等返回0;左大于右返回1;右大于左返回-1*http://php.net/manual/zh/function.bccomp.php*@returnint*/privatefunctioncomp(){returnbccomp($this->leftNumber,$this->正确的数字);}/***取模任意精度数*http://php.net/manual/zh/function.bcmod.php*@returnstring*/privatefunctionmod(){returnbcmod($this->leftNumber,$这个->rightNumber);}/***任意精度数的幂*http://php.net/manual/zh/function.bcpow.php*@returnstring*/privatefunctionpow(){returnbcpow($this->leftNumber,$这个->rightNumber);}/***任意精度数的平方根*http://php.net/manual/zh/function.bcsqrt.php*@returnstring*/privatefunctionsqrt(){returnbcsqrt($this->leftNumber);}}$bc=newBCCalculate(3.45,5.61);var_dump($bc->leftNumber);//获取数字float(3.45)echo'
';$bc->leftNumber=24.08;var_dump($bc->leftNumber);//修改数字float(24.08)echo'
';var_dump($bc->add());//注意返回值为字符串string(5)"29.69"echo'
';$bc->setScale(3);//修改小数点后位数var_dump($bc->sub());//string(6)"18.470"echo'
';var_dump($bc->mul());//string(7)"135.088"echo'
';var_dump($bc->div());//string(5)"4.292"echo'
>';var_dump($bc->comp());//int(1)ech??o'
';$bc->leftNumber=10;$bc->rightNumber=4;var_dump($bc->mod());//字符串(1)"2"echo'
';var_dump($bc->pow());//字符串(5)"10000"回显'
';$bc->leftNumber=16;var_dump($bc->sqrt());//字符串(5)"4.000"echo'
';补充说到钱的数量,可以看之前文章的参考资料:PHP:MagicMethod,BCMath任意精度数学。
