關於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[ i ]*args[ i ].rate();
for(i=0;i<args.length;i++)
temp/=args[ i ].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)
}
轉自百度空間瀟瀟雨部落格。