php的精度计算问题(bcadd和bcsub)
Posted 君乐豹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php的精度计算问题(bcadd和bcsub)相关的知识,希望对你有一定的参考价值。
一、前言
我们在进行php
开发的时候经常会遇到浮点型的问题,特别是涉及金额的部分,常常需要进行加减运算。当小数点的位数比较多的时候,往往容易犯一些很低级的错误。这里记录一下php
的精度计算和封装的小demo
。
二、关于php的高精度问题
1、概念解释
这篇文章的解释最清楚:
2、高精度数值对比大小问题
下面这篇文章讲的很好:
默认保留两位小数
bcadd(参数1,参数2,参数3)
参数1 和2 是要相加的参数 3是保留几位小数。
1. bcadd 任意精度数的相加
2. bcsub 任意精度数的减法
3. bcmul 乘法, bcdiv除法
4. bcmod 取余数。 (比%功能更强大)
5. bcpow 幂函数运算
6. bcsqrt 平方根
7. sqrt 平方根运算
7. pow求幂
8. abs 求绝对值
9. pi 得到圆周率数值
10.bccomp — 比较
三、封装的小demo
//$m和$n代表传入的两个数值,主要就是这两个数值之间的比较 //$x代表传入的方法,比如是;add,sub等 //$scale 代表传入的小数点位数。这个根据需求更改即可 public function calc($m,$n,$x,$scale){ $errors=array( \'被除数不能为零\', \'负数没有平方根\' ); switch($x){ case \'add\': $t=bcadd($m,$n,$scale); break; case \'sub\': $t=bcsub($m,$n,$scale); break; case \'mul\': $t=bcmul($m,$n); break; case \'div\': if($n!=0){ $t=bcdiv($m,$n); }else{ return $errors[0]; } break; case \'pow\': $t=bcpow($m,$n); break; case \'mod\': if($n!=0){ $t=bcmod($m,$n); }else{ return $errors[0]; } break; case \'sqrt\': if($m>=0){ $t=bcsqrt($m); }else{ return $errors[1]; } break; } return $t; }
调用方式:
$result= $this->calc(2.001,3.002,\'sub\',3);
结束!!!
以上是关于php的精度计算问题(bcadd和bcsub)的主要内容,如果未能解决你的问题,请参考以下文章