let theme = 'color: red; background: yellow; font-size: 24px;';
let logger = function(text){
console.log("%c"+text, theme)
}
var FloatCalculate = {
accAdd: function(arg1,arg2){
var r1,r2,t1,t2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
t1=Number(arg1.toString().replace(".",""))
t2=Number(arg2.toString().replace(".",""))
if(r1>r2){
t2 = t2 * Math.pow(10, r1-r2)
}else if(r1<r2){
t1 = t1 * Math.pow(10, r2-r1)
}
m=Math.pow(10,Math.max(r1,r2))
return (t1+t2)/m
},
accSub: function(arg1,arg2){
var r1,r2,t1,t2,m,n;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
t1=Number(arg1.toString().replace(".",""))
t2=Number(arg2.toString().replace(".",""))
if(r1>r2){
t2 = t2 * Math.pow(10, r1-r2)
}else if(r1<r2){
t1 = t1 * Math.pow(10, r2-r1)
}
m=Math.pow(10,Math.max(r1,r2));
//last modify by deeka
//动态控制精度长度
n=(r1>=r2)?r1:r2;
return ((t1-t2)/m).toFixed(n);
},
accMul: function(arg1,arg2){
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
},
accDiv: function(arg1,arg2){
var t1=0,t2=0,r1,r2;
try{t1=arg1.toString().split(".")[1].length}catch(e){}
try{t2=arg2.toString().split(".")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".",""))
r2=Number(arg2.toString().replace(".",""))
return (r1/r2)*pow(10,t2-t1);
}
}
}
logger("存在精度问题");
logger(8.00 + 1.38)
logger(0.1 + 0.2)
logger(0.7 + 0.1)
logger(0.2 + 0.4)
logger(2.22 + 0.1)
logger(1.5 - 1.2)
logger(0.3 - 0.2)
logger(19.9 * 100)
logger(1306377.64 * 100)
logger(0.7 * 180)
logger("解决精度问题");
logger(FloatCalculate.accAdd(8.00, 1.38))
logger(FloatCalculate.accAdd(0.1, 0.2))
logger(FloatCalculate.accAdd(0.7, 0.1))
logger(FloatCalculate.accAdd(0.2, 0.4))
logger(FloatCalculate.accAdd(2.22, 0.1))
logger(FloatCalculate.accSub(1.5, 1.2))
logger(FloatCalculate.accSub(0.3, 0.2))
logger(FloatCalculate.accMul(19.9, 100))
logger(FloatCalculate.accMul(1306377.64, 100))
logger(FloatCalculate.accMul(0.7, 180))
console