相比前端进行计算,有好多小数位加减乘除出现科学计数,倒是精确不对,来面我写一些解决该问题的办法,上代码!
加法运算:
function accAdd ( arg1, arg2){
let r1, r2, m, n
try {
r1 = arg1.toString().split('.')[1].length;
}catch (e){
r1 = 0;
}
try {
r2 = arg2.toString().split('.')[1].length;
}catch (e){
r2 = 0;
}
m = Math.pow(10,Math.max(r1,r2));
n = r1 >= r2 ? r1 :r2
return +(( arg1 * m + arg2 *m)/m).toFixed(n)
}
减法运算:
function accSub ( arg1, arg2){
let r1, r2, m, n
try {
r1 = arg1.toString().split('.')[1].length;
}catch (e){
r1 = 0;
}
try {
r2 = arg2.toString().split('.')[1].length;
}catch (e){
r2 = 0;
}
m = Math.pow(10,Math.max(r1,r2));
n = r1 >= r2 ? r1 :r2
return +(( arg1 * m - arg2 *m)/m).toFixed(n)
}
乘法运算:
function accMul ( arg1, arg2){
let r1 = arg1.toString();
let r2 = arg2.toString();
let m = 0;
try {
m += arg1.toString().split('.')[1].length
}catch(e){}
try {
m += arg2.toString().split('.')[1].length
}catch(e){}
return (Number(r1.replace('.','')) * Number(r2.replace('.',''))) / Math.pow(10,m)
}
除法运算:
function accDiv(arg1, arg2){
let r1,r2,t1 = 0,t2 = 0;
arg1 = arg1.toString();
arg2 = arg2.toString();
try{
t1 = arg1.split('.').length;
}catch(e){}
try {
t2 = arg2.split('.').length;
}
r1 = Number(arg1.replace('.',''));
r2 = Number(arg2.replace('.',''));
let num = Math.pow(10, t2-t1);
let num1 = r1/r2;
return accMul(num1, num) //调用乘法
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)