SOURCE

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 命令行工具 X clear

                    
>
console