PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述。
下面我们看一个例子

90.09是客户提现前的余额,90是提现金额,后面那一长串是php程序计算的结果,很明显这个结果不是我们所预期的,之所以出现这种情况是因为程序是直接将余额和提现金额直接相减导致,假如用户余额为$money_before,提现金额为$money,那么这时的计算方式就是$money_before-$money,所以得到上面那一长串数字,网上了解到php对浮点直接计算是有精度损失的,所以我们要用到上面php给我们专门提供的一个精度计算的方法,手册里面介绍是BC 数学 函数,它一共包含如下函数方法:
bcadd — 2个任意精度数字的加法计算
bccomp — 比较两个任意精度的数字
bcdiv — 2个任意精度的数字除法计算
bcmod — 对一个任意精度数字取模
bcmul — 2个任意精度数字乘法计算
bcpow — 任意精度数字的乘方
bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus
bcscale — 设置所有bc数学函数的默认小数点保留位数
bcsqrt — 任意精度数字的二次方根
bcsub — 2个任意精度数字的减法
此时我们需要的是计算两个浮点数相减并得到正确的结果,那么bcsub这个函数就是我们需要的
bcsub($money_before,$money,2);//第三个参数是需要精确到小数几位

现在再来看看数据,0.09,这个就是我们需要的正确结果