背景
在项目碰到比较小的金额计算问题,然后就碰上了9.95+0.01的这样的数值,发现这个在js和php中直接用+号计算结果都是9.959999999999999,而不是9.96
$a=9.95;
$b= 0.01;
$count=$a+$b; //这里输出是9.959999999999999
//正确应该是9.96才对
解决方案
查了一下手册发现
php是有高精度计算函数
$a=9.95;
$b= 0.01;
$count= bcadd($a,$b,2); // 输出9.96
当我们需要进行涉及小数位的高精度计算时候建议使用高精度函数去进行计算
- 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个任意精度数字的减法