成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript浮點(diǎn)值運(yùn)算舍入誤差

Lin_R / 1880人閱讀

摘要:例如我們?cè)谟?jì)算加時(shí),它的輸出結(jié)果不是,而是。既然是由于浮點(diǎn)數(shù)的二進(jìn)制為無(wú)窮數(shù)產(chǎn)生的誤差,這種誤差在整數(shù)運(yùn)算中不會(huì)存在,聰明的你是不是窺破真相了呢沒(méi)錯(cuò)那就是在運(yùn)算工程中將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù),再將得出的結(jié)果轉(zhuǎn)換為浮點(diǎn)數(shù)。

問(wèn)題

在javascript中整數(shù)和浮點(diǎn)數(shù)都屬于Number數(shù)據(jù)類型(簡(jiǎn)單數(shù)據(jù)類型中的一種),我們經(jīng)常會(huì)發(fā)現(xiàn)在打印1.0這樣的浮點(diǎn)數(shù)的結(jié)果是1而非1.0,這是由于保存浮點(diǎn)數(shù)的內(nèi)存空間是保存整數(shù)值的兩倍,所以ECMAScript會(huì)不失時(shí)機(jī)地將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)。
上面這種情況雖然讓強(qiáng)迫癥患者有點(diǎn)不舒服,但是好歹也不是什么大錯(cuò),接下來(lái)這種情況就很嚇人了。例如我們?cè)谟?jì)算0.10.2時(shí),它的輸出結(jié)果不是0.3,而是0.3000000000000004。what the fuck?!第一次遇到這種情況的童鞋有沒(méi)有感覺(jué)到世界觀受到了挑戰(zhàn)?

產(chǎn)生原因

于是趕快翻書來(lái)拯救自己的靈魂以及肉體,發(fā)現(xiàn)書中赫然寫著:ECMAScrip是基于IEEE754數(shù)值浮點(diǎn)計(jì)算如果不知道IEEE754是什么就點(diǎn)我吧,這種數(shù)值計(jì)算方法會(huì)將數(shù)值保存為二進(jìn)制然后進(jìn)行計(jì)算,由于浮點(diǎn)數(shù)用二進(jìn)制表達(dá)時(shí)是無(wú)窮的,所以在進(jìn)行算術(shù)計(jì)算時(shí)會(huì)產(chǎn)生舍入誤差,由于舍入誤差的存在,浮點(diǎn)數(shù)計(jì)算的精確度遠(yuǎn)遠(yuǎn)不如整數(shù)計(jì)算,最后記住了永遠(yuǎn)不要測(cè)試某個(gè)特定浮點(diǎn)數(shù)的數(shù)值。
所以楊絳先生說(shuō)的對(duì),年輕人就是想的多讀書少,沒(méi)文化總是動(dòng)不動(dòng)就會(huì)懷疑人生,所以還是要多讀書?。。?!

解決方案

所謂對(duì)癥下藥,知道了問(wèn)題產(chǎn)生的原因那么就可以找到問(wèn)題的解決方案啦。既然是由于浮點(diǎn)數(shù)的二進(jìn)制為無(wú)窮數(shù)產(chǎn)生的誤差,這種誤差在整數(shù)運(yùn)算中不會(huì)存在,聰明的你是不是窺破真相了呢?沒(méi)錯(cuò),那就是在運(yùn)算工程中將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù),再將得出的結(jié)果轉(zhuǎn)換為浮點(diǎn)數(shù)??凸?,下面是新鮮上的代碼~

//加法  
function FloatAdd(arg1,arg2){  
       var r1,r2,m; 
       try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0; //參數(shù)1為整數(shù)};  //參數(shù)1小數(shù)點(diǎn)后的位數(shù)
       try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0; //參數(shù)2為整數(shù)}; //參數(shù)2小數(shù)點(diǎn)后的位數(shù)
       m=Math.pow(10,Math.max(r1,r2));  //取其中較大的位數(shù)
       return (arg1*m+arg2*m)/m;   //先將arg1和arg2轉(zhuǎn)換為整數(shù)進(jìn)行計(jì)算,然后再轉(zhuǎn)換回浮點(diǎn)數(shù)
  }  

done,科科~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87978.html

相關(guān)文章

  • 為什么0.1+0.2不等于0.3

    摘要:又如,對(duì)于,結(jié)果其實(shí)并不是,但是最接近真實(shí)結(jié)果的數(shù),比其它任何浮點(diǎn)數(shù)都更接近。許多語(yǔ)言也就直接顯示結(jié)果為了,而不展示一個(gè)浮點(diǎn)數(shù)的真實(shí)結(jié)果了。小結(jié)本文主要介紹了浮點(diǎn)數(shù)計(jì)算問(wèn)題,簡(jiǎn)單回答了為什么以及怎么辦兩個(gè)問(wèn)題為什么不等于。 原文地址:為什么0.1+0.2不等于0.3 先看兩個(gè)簡(jiǎn)單但詭異的代碼: 0.1 + 0.2 > 0.3 // true 0.1 * 0.1 = 0.01000000...

    Profeel 評(píng)論0 收藏0
  • 關(guān)于 JavaScript 浮點(diǎn)運(yùn)算的精度解決方案

    摘要:原因至于問(wèn)題產(chǎn)生的原因,或者關(guān)于問(wèn)題的更詳細(xì)的描述,大家請(qǐng)看下面幾個(gè)文章浮點(diǎn)運(yùn)算浮點(diǎn)值運(yùn)算舍入誤差基礎(chǔ)浮點(diǎn)數(shù)四則運(yùn)算精度丟失問(wèn)題解決方案這里主要討論一下解決方案的問(wèn)題,上面幾篇文章的解決思路,都是重寫加法減法乘法和除法運(yùn)算。 問(wèn)題背景 在 chrome 瀏覽器中調(diào)出開(kāi)發(fā)者工具,在控制臺(tái)窗口輸入下面的表達(dá)式: 0.1 + 0.2 // 期望:0.3,結(jié)果:0.300...

    jsyzchen 評(píng)論0 收藏0
  • [ JS 基礎(chǔ) ] JS 浮點(diǎn)數(shù)四則運(yùn)算精度丟失問(wèn)題 (3)

    摘要:基于這個(gè)問(wèn)題運(yùn)動(dòng)基礎(chǔ)問(wèn)題,我想應(yīng)該也有一部分人沒(méi)有認(rèn)真對(duì)待過(guò)中浮點(diǎn)數(shù)的四則運(yùn)算出現(xiàn)的問(wèn)題。解決方案引自解決方案為了解決浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確的問(wèn)題,在運(yùn)算前我們把參加運(yùn)算的數(shù)先升級(jí)的的次方到整數(shù),等運(yùn)算完后再降級(jí)的的次方。 基于這個(gè)問(wèn)題:javascript運(yùn)動(dòng)基礎(chǔ)問(wèn)題 ,我想應(yīng)該也有一部分人沒(méi)有認(rèn)真對(duì)待過(guò)js中浮點(diǎn)數(shù)的四則運(yùn)算出現(xiàn)的問(wèn)題。 1.問(wèn)題描述 示例代碼: var x ...

    hoohack 評(píng)論0 收藏0
  • JS數(shù)

    摘要:由于浮點(diǎn)數(shù)不是精確的值,所以涉及小數(shù)的比較和運(yùn)算要特別小心。根據(jù)標(biāo)準(zhǔn),位浮點(diǎn)數(shù)的指數(shù)部分的長(zhǎng)度是個(gè)二進(jìn)制位,意味著指數(shù)部分的最大值是的次方減。也就是說(shuō),位浮點(diǎn)數(shù)的指數(shù)部分的值最大為。 一 前言 這篇文章主要解決以下三個(gè)問(wèn)題: 問(wèn)題1:浮點(diǎn)數(shù)計(jì)算精確度的問(wèn)題 0.1 + 0.2; //0.30000000000000004 0.1 + 0.2 === 0.3; // ...

    williamwen1986 評(píng)論0 收藏0
  • JavaScript權(quán)威指南筆記(上)-語(yǔ)言核心

    摘要:二進(jìn)制浮點(diǎn)數(shù)和四舍五入錯(cuò)誤在使用實(shí)數(shù)時(shí),常常只是真實(shí)值的一個(gè)近似表示。作用域分類全局函數(shù),塊級(jí)作用域鏈變量對(duì)象用于存儲(chǔ)執(zhí)行上下文中的變量函數(shù)聲明函數(shù)參數(shù)變量初始化階段瀏覽器截圖瀏覽器截圖代碼執(zhí)行階段類和模塊 詞法結(jié)構(gòu) 字符集 使用Unicode編寫 ES3 Unicode2.1+ ES5 Unicode3+ 區(qū)分大小寫 注釋 // 注釋 /* 注釋 */ 標(biāo)識(shí)符和保留字 必須以字...

    skinner 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<