1.首先定义公共js---until.js,导入vue

import Vue from 'vue'

声明为vue实例函数

思路是把参数小数点去掉,已整数进行计算,再进行精度运算

Vue.prototype.highPrecisionAdd = function (data1,data2) {// 加法
       let r1,r2,m;
       // 获取每个参数的小数的位数
       try{r1=data1.toString().split(".")[1].length}catch(e){r1=0}
       try{r2=data2.toString().split(".")[1].length}catch(e){r2=0}
       // 计算底数为10以最大小数位数为次幂的值
       m=Math.pow(10,Math.max(r1,r2));
       // 把所有参数转为整数后相加再除以次幂的值
       return (data1*m + data2*m)/m;
     };

     Vue.prototype.highPrecisionReduce = function (data1,data2) {// 减法
       let r1,r2,m,n;
       // 获取每个参数的小数的位数
       try{r1=data1.toString().split(".")[1].length}catch(e){r1=0}
       try{r2=data2.toString().split(".")[1].length}catch(e){r2=0}
       // 计算底数为10以最大小数位数为次幂的值
       m=Math.pow(10,Math.max(r1,r2));
       //精度长度以最大小数位数为长度
       n=(r1>=r2)?r1:r2;
       return ((data1*m-data2*m)/m).toFixed(n);
     };
     Vue.prototype.highPrecisionMul = function (data1,data2) {// 乘法
       let m=0,s1=data1.toString(),s2=data2.toString();
       // 获取所有参数小数位长度之和
       try{m+=s1.split(".")[1].length}catch(e){}
       try{m+=s2.split(".")[1].length}catch(e){}
       // 替换掉小数点转为数字相乘再除以10的次幂值
       return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
     };
     Vue.prototype.highPrecisionDiv = function (data1,data2) {// 除法
       let t1=0,t2=0,r1,r2;
       // 获取每个参数的小数的位数
       try{t1=data1.toString().split(".")[1].length}catch(e){}
       try{t2=data2.toString().split(".")[1].length}catch(e){}
       // 把所有参数的小数点去掉转为整数
       r1=Number(data1.toString().replace(".",""));
       r2=Number(data2.toString().replace(".",""));
       return (r1/r2)*Math.pow(10,t2-t1);
     };

2.在mian.js内导入,全局调用

Logo

前往低代码交流专区

更多推荐