移動端小數計算不正確問題
阿新 • • 發佈:2018-12-26
移動端小數計算不正確問題
最近在做小程式迭代版本出現了一些新的問題:
- 小數計算問題
由於顯示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)//自己可以試試