1.utils工具函数文件夹下新建文件mathUtils.js
/**
*加法运算,避免数据相加小数点后产生多位数和计算精度损失
*/
export function numAdd(num1 , num2){
var r1,r2,m;
try{
r1 = num1.toString().split('.')[1].length;
}catch(e){
r1 = 0;
}
try{
r2=num2.toString().split('.')[1].length;
}catch(e){
r2 = 0;
}
m = Math.pow(10,Math.max(r1,r2));
return Math.round(num1*m+num2*m)/m;
}
/**
*减法运算
*/
export function numSub(num1,num2){
let baseNum, baseNum1, baseNum2;
let precision;
try{
baseNum1 = num1.toString().split('.')[1].length;
}catch(e){
baseNum1 = 0;
}
try{
baseNum2 = num2.toString().split('.')[1].length;
}catch(e){
baseNum2 = 0;
}
baseNum = Math.pow(10,Math.max(baseNum1,baseNum2));
precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
}
/**
*乘法运算
*/
export function numMulti(num1,num2){
let baseNum = 0;
try{
baseNum += num1.toString().split('.')[1].length;
}catch(e){
}
try{
baseNum += num2.toString().split('.')[1].length;
}catch(e){
}
return Number(num1.toString.replace(".","")) * Number(num2.toString.replace(".","")) / Math.pow(10, baseNum);
}
/**
*除法运算
*/
export function numDiv(num1, num2){
let baseNum1 = 0, baseNum2 = 0;
let baseNum3, baseNum4;
try{
baseNum1 = num1.toString().split('.')[1].length;
}catch(e){
baseNum1 = 0;
}
try{
baseNum2 = num2.toString().split('.')[1].length;
}catch(e){
baseNum2 = 0;
}
baseNum3 = Number(num1.toString.replace(".",""));
baseNum4 = Number(num2.toString.replace(".",""));
return (baseNum3 / baseNum4) * Math.pow(10, baseNum2 - baseNum1);
}
2.main.js入口文件引入
//引入数学精度处理
import {numAdd, numDiv, numMulti, numSub} from './utils/mathUtils.js';
//设置全局精度处理方法
Vue.prototype.$numAdd = numAdd
Vue.prototype.$numSub = numSub
Vue.prototype.$numMulti = numMulti
Vue.prototype.$numDiv = numDiv