麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

淺析js中的浮點型運算問題

2019-11-20 21:18:45
字體:
來源:轉載
供稿:網友

js中浮點型是如何運算的呢?

例如:var a=0.69;

我想得到6.9 直接這樣寫 var c=a*10;

alert(c);   得到結果是:6.8999999999999995

到網上一搜,有網友說這是一個JS浮點數運算Bug,找了解決方法:

方法一:有js自定義函數

復制代碼 代碼如下:

<script>

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

//加法函數,用來得到精確的加法結果
//說明:javascript的加法結果會有誤差,在兩個浮點數相加的時候會比較明顯。這個函數返回較為精確的加法結果。
//調用:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精確結果
function accSub(arg1,arg2){
    var r1,r2,m,n;
    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));
    //last modify by deeka
    //動態控制精度長度
    n=(r1>=r2)?r1:r2;
    return ((arg1*m-arg2*m)/m).toFixed(n);
}

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

//乘法函數,用來得到精確的乘法結果
//說明: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)
}
//給Number類型增加一個mul方法,調用起來更加方便。
Number.prototype.mul = function (arg){
return accMul(arg, this);
}

var a=0.69;
var b=10;
alert(a*b);//6.8999999999999995
alert((a*100)/10);
</script>


直接調用函數就可以。

方法二:如果在知道小數位個數的前提下,可以考慮通過將浮點數放大倍數到整型(最后再除以相應倍數),再進行運算操作,這樣就能得到正確的結果了

alert(11*22.9);//得到251.89999999999998
alert(11*(22.9*10)/10);//得到251.9

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 多人乱大交xxxxx变态 | 精精国产xxxx视频在线野外 | 精精国产xxxx视频在线野外 | chinese xvideos gay| 久久亚洲第一 | 欧美成人免费看 | 最新亚洲国产 | 亚洲精品免费播放 | 一级视频网站 | 日本精品一区二区 | 国产日产精品一区二区三区四区 | 看免费黄色大片 | 久久亚洲一区二区三区成人国产 | 91精品视频免费 | 911网站大全在线观看 | 久久区二区 | 国产色视频免费 | 久久在线免费视频 | 久久久一区二区精品 | 国产精品视频自拍 | 日韩美香港a一级毛片 | 在线成人免费观看www | 国产电影精品久久 | www.99久久久| 国产乱乱视频 | 久久国产一级片 | 国产资源在线观看视频 | 久草在线资源观看 | 中国国语毛片免费观看视频 | 午夜精品福利视频 | 欧美黄色一级片在线观看 | 久久精品国产99国产精品澳门 | 亚洲精品久久久久久 | 欧美成人高清视频 | 一级黄色在线观看 | 56av国产精品久久久久久久 | 青青草成人影视 | 舌头伸进添的我好爽高潮网站 | 精品国产亚洲人成在线 | 香蕉视频99| 欧美一级毛片大片免费播放 |