1. 程式人生 > >關於js小數乘除法計算不正確的解決方案

關於js小數乘除法計算不正確的解決方案

方案1

<script>
      alert(11*(22.9*10)/10);
</script> 

解決問題的大概思路就是,先把 因數放大為整數,最後再除以相應的倍數,這樣就能得到正確的結果了。 

方案二

<script defer>
Number.prototype.rate=function(){ 
var oStr=this.toString();
if(oStr.indexOf(".")==-1) 
return 1;
else


return Math.pow(10,parseInt(oStr.length-oStr.indexOf(".")-1));
}

function tran(){
args=tran.arguments;
var temp=1;
for(i=0;i<args.length;i++)
temp*=args[ ]*args[ ].rate();
for(i=0;i<args.length;i++) 
temp/=args[ ].rate();
return temp
}

alert(tran(11,22.9));


</script>

該解決 辦法是比較麻煩的辦法,但是卻能讓你大概瞭解解決這個問題的實際過程。

方案三

//乘法函式,用來得到精確的乘法結果
//說明:javascript的乘法結果會有誤差,在兩個浮點數 相乘的時候會比較明顯。這個函式返回較為精確的乘法結果。
//呼叫:accMul(arg1,arg2)
//返回值:arg1乘以 arg2的精確結果
function accMul(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)
}

轉自百度空間瀟瀟雨部落格。