移动端小数计算不正确问题
最近在做小程序迭代版本出现了一些新的问题:
- 小数计算问题
由于显示1的时候其实并不是1而是1.0000几几几,所以加减是会出问题,比如我们的折扣价格是199.00,后台传的是原价和折扣,计算就会出问题
解:(下面是网搜的解决方案)
function decNum(a) {/*获取小数位数*/
var r = 0;
a = a.toString();
if (a.indexOf(".") !== -1) r = a.split(".")[1].length;
return r;
}
function int(a) {/*去除小数点并转成数值*/
return parseInt(a.toString().replace(".", ""));
}
function calc(a, b, type) {//加减乘除
var r,
da = decNum(a),
db = decNum(b),
dsum = da + db,
dmin = Math.min(da, db),
dmax = Math.max(da, db);
dsum += dmax - dmin;
dsum = Math.pow(10, dsum);
dmax = Math.pow(10, dmax);
a = int(a);
b = int(b);
if (da > db) {
b *= Math.pow(10, da - db);
} else {
a *= Math.pow(10, db - da);
}
switch (type) {
case "add":
r = (a + b) / dmax;
break;
case "subtract":
r = (a - b) / dmax;
break;
case "multiply":
r = (a * b) / dsum;
break;
case "divide":
r = a / b;
break;
}
return r;
}
calc(a, b, type)//自己可以试试