真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

js中Number數(shù)字數(shù)值運算后值不對的解決方法-創(chuàng)新互聯(lián)

問題:

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供廣陵企業(yè)網站建設,專注與成都網站設計、網站制作、外貿營銷網站建設H5頁面制作、小程序制作等業(yè)務。10年已為廣陵眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網站制作公司優(yōu)惠進行中。

37.5*5.5=206.08 (JS算出來是這樣的一個結果,我四舍五入取兩位小數(shù))

我先懷疑是四舍五入的問題,就直接用JS算了一個結果為:206.08499999999998

怎么會這樣,兩個只有一位小數(shù)的數(shù)字相乘,怎么可能多出這么小數(shù)點出來。

我Google了一下,發(fā)現(xiàn)原來這是JavaScript浮點運算的一個bug。

比如:7*0.8 JavaScript算出來就是:5.6000000000000005

解決方法:網上找到了一些解決辦法,就是重新寫了一些浮點運算的函數(shù)。

下面就把這些方法摘錄下來,以供遇到同樣問題的朋友參考:

程序代碼

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

//給Number類型增加一個div方法,調用起來更加方便。
Number.prototype.div = function (arg){
 return accDiv(this, arg);
}

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

//給Number類型增加一個mul方法,調用起來更加方便。
Number.prototype.mul = function (arg){
 return accMul(arg, this);
}

//加法函數(shù),用來得到精確的加法結果
//說明:javascript的加法結果會有誤差,在兩個浮點數(shù)相加的時候會比較明顯。這個函數(shù)返回較為精確的加法結果。
//調用:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精確結果
function accAdd(arg1,arg2){
 var r1,r2,m;
 try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
 try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
 m=Math.pow(10,Math.max(r1,r2))
 return (arg1*m+arg2*m)/m
}

//給Number類型增加一個add方法,調用起來更加方便。
Number.prototype.add = function (arg){
 return accAdd(arg,this);
}

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網頁標題:js中Number數(shù)字數(shù)值運算后值不對的解決方法-創(chuàng)新互聯(lián)
瀏覽地址:http://weahome.cn/article/ccihhj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部