在使用加减乘除对两个数值运算过程中,会出现精度缺失,小数位出现99999…等情况,接下来是解决方法。
1.计算代码
export function actionOperationResult(val1, symbol, val2) {
const len1 = val1.toString().length - val1.toString().indexOf(".") - 1;
const len2 = val2.toString().length - val2.toString().indexOf(".") - 1;
const p = Math.max(len1, len2);
// 避免最终求出结果的长度大于最大长度的时候导致精度丢失 开启下面
// p += p - Math.min(len1, len2);
const num = Math.pow(10, p);
switch (symbol) {
case "+":
return (parseFloat((val1 * num).toFixed(2)) + parseFloat((val2 * num).toFixed(2))) / num;
case "-":
return (parseFloat((val1 * num).toFixed(2)) - parseFloat((val2 * num).toFixed(2))) / num;
case "*":
return (parseFloat((val1 * num).toFixed(2)) * parseFloat((val2 * num).toFixed(2))) / (num * num);
default:
break;
}
}
2.调用代码
let quantity = 0,ton = 0
this.checkedData.forEach(v => {
quantity = Number(quantity) + Number(v.quantity)
ton = this.$toolFun.actionOperationResult(ton,'+',v.ton)
})
this.checkQuantity = quantity
this.checkTon = ton
3.公共方法全局注册
import * as toolFun from '@/libs/tools.js'; // 引入工具类
Vue.prototype.$toolFun = toolFun