最近在做一个记账小程序的时候发现js的加减算法会有误差,例如
console.log(0.1+0.2); console.log(6.8-0.9); 0.30000000000000004 5.8999999999999995
在浮点数计算的时候,很多时候产生的都是这种极限数据,如果要精确进行整数转换,要放大的倍数过大
下面是解决的方法:
//消除js计算误差add、reduce是传入的加减数字,reduce是被加数(被减数),s是加减符号
function formatNum(add, reduce, s, num) {
let m = Math.pow(10, num); //num是10的次幂
let res = s == '+' ? (add * m + reduce * m) / m : (add * m - reduce * m) / m;
return Math.round(res * m)/m;
}
console.log(formatNum(0.1,0.2,'+',2))
console.log(formatNum(6.8,0.9,'-',2))
0.3
5.9
有不足的地方请在评论区留言指点。
最后附上小程序码,欢迎体验;