//封装计算精度问题
add(num1, num2) {
//将数字转换成字符串
num1 = num1.toString();
num2 = num2.toString();
//获取小数点的位置
var index1 = num1.indexOf(".");
var index2 = num2.indexOf(".");
//如果小数点存在,那么就再获取各自的小数位数
var ws1 = 0;
var ws2 = 0;
if (index1 != -1) {
ws1 = num1.split(".")[1].length;
}
if (index2 != -1) {
ws2 = num2.split(".")[1].length;
}
//看谁的小数位数大,谁的小数位数小
var bigger = ws1 > ws2 ? ws1 : ws2;
var smaller = ws1 < ws2 ? ws1 : ws2;
//计算得到需要补齐的的0的个数
var zerosCount = bigger - smaller;
//全部去除小数点
num1 = num1.replace(".", "");
num2 = num2.replace(".", "");
//比较num1 和num2的值谁比较大,比较方法是看谁是smaller,是smaller的一方就补0
if (ws1 == smaller) {
for (var i = 0; i < zerosCount; i++) {
num1 += "0";
}
} else {
for (var i = 0; i < zerosCount; i++) {
num2 += "0";
}
}
//开始计算
var sum = parseInt(num1) + parseInt(num2);
//根据较大的小数位数计算倍数
var beishu = 1;
for (var i = 0; i < bigger; i++) {
beishu = beishu * 10;
}
sum = sum / beishu;
return sum;
},
//最后进行调用
console.log(this.add(0.1,0.2))
以上就能解决各种的数值相加导致的精度问题了,乘除计算的话在上面的计算环节进行适当修改就好了,屡试不爽哦。