js中浮點加減乘除失精的問題解決

 

通過上面兩張圖片可以看出,明明是0.29,在經過js乘以100以後,竟然變成了28.99999...

對於涉世未深的我來說當時簡直產生自我認可懷疑了,是不是我哪裏寫錯了。。。。。

 

 

然後經過問大牛,解決辦法如下:(包含加減乘除)

 Number.prototype.add = function(arg){  
        var r1,r2,m;  
        try{r1=this.toString().split(".")[1].length}catch(e){r1=0}  
        try{r2=arg.toString().split(".")[1].length}catch(e){r2=0}  
        m=Math.pow(10,Math.max(r1,r2))  
        return (this*m+arg*m)/m  
    } 


     Number.prototype.sub = function (arg){  
         return this.add(-arg);  
    }  
 
   Number.prototype.mul = function (arg)   {  
    var m=0,s1=this.toString(),s2=arg.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)  
}  
 
   Number.prototype.div = function (arg){  
    var t1=0,t2=0,r1,r2;  
    try{t1=this.toString().split(".")[1].length}catch(e){}  
    try{t2=arg.toString().split(".")[1].length}catch(e){}  
    with(Math){  
        r1=Number(this.toString().replace(".",""))  
        r2=Number(arg.toString().replace(".",""))  
        return (r1/r2)*pow(10,t2-t1);  
    }  
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章