国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript浮點值運算舍入誤差

Lin_R / 1877人閱讀

摘要:例如我們在計算加時,它的輸出結果不是,而是。既然是由于浮點數的二進制為無窮數產生的誤差,這種誤差在整數運算中不會存在,聰明的你是不是窺破真相了呢沒錯那就是在運算工程中將浮點數轉換為整數,再將得出的結果轉換為浮點數。

問題

在javascript中整數和浮點數都屬于Number數據類型(簡單數據類型中的一種),我們經常會發現在打印1.0這樣的浮點數的結果是1而非1.0,這是由于保存浮點數的內存空間是保存整數值的兩倍,所以ECMAScript會不失時機地將浮點數轉換為整數。
上面這種情況雖然讓強迫癥患者有點不舒服,但是好歹也不是什么大錯,接下來這種情況就很嚇人了。例如我們在計算0.10.2時,它的輸出結果不是0.3,而是0.3000000000000004。what the fuck?!第一次遇到這種情況的童鞋有沒有感覺到世界觀受到了挑戰?

產生原因

于是趕快翻書來拯救自己的靈魂以及肉體,發現書中赫然寫著:ECMAScrip是基于IEEE754數值浮點計算如果不知道IEEE754是什么就點我吧,這種數值計算方法會將數值保存為二進制然后進行計算,由于浮點數用二進制表達時是無窮的,所以在進行算術計算時會產生舍入誤差,由于舍入誤差的存在,浮點數計算的精確度遠遠不如整數計算,最后記住了永遠不要測試某個特定浮點數的數值
所以楊絳先生說的對,年輕人就是想的多讀書少,沒文化總是動不動就會懷疑人生,所以還是要多讀書啊!!!

解決方案

所謂對癥下藥,知道了問題產生的原因那么就可以找到問題的解決方案啦。既然是由于浮點數的二進制為無窮數產生的誤差,這種誤差在整數運算中不會存在,聰明的你是不是窺破真相了呢?沒錯,那就是在運算工程中將浮點數轉換為整數,再將得出的結果轉換為浮點數。客官,下面是新鮮上的代碼~

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

done,科科~

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/87978.html

相關文章

  • 為什么0.1+0.2不等于0.3

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

    Profeel 評論0 收藏0
  • 關于 JavaScript 浮點運算的精度解決方案

    摘要:原因至于問題產生的原因,或者關于問題的更詳細的描述,大家請看下面幾個文章浮點運算浮點值運算舍入誤差基礎浮點數四則運算精度丟失問題解決方案這里主要討論一下解決方案的問題,上面幾篇文章的解決思路,都是重寫加法減法乘法和除法運算。 問題背景 在 chrome 瀏覽器中調出開發者工具,在控制臺窗口輸入下面的表達式: 0.1 + 0.2 // 期望:0.3,結果:0.300...

    jsyzchen 評論0 收藏0
  • [ JS 基礎 ] JS 浮點數四則運算精度丟失問題 (3)

    摘要:基于這個問題運動基礎問題,我想應該也有一部分人沒有認真對待過中浮點數的四則運算出現的問題。解決方案引自解決方案為了解決浮點數運算不準確的問題,在運算前我們把參加運算的數先升級的的次方到整數,等運算完后再降級的的次方。 基于這個問題:javascript運動基礎問題 ,我想應該也有一部分人沒有認真對待過js中浮點數的四則運算出現的問題。 1.問題描述 示例代碼: var x ...

    hoohack 評論0 收藏0
  • JS數

    摘要:由于浮點數不是精確的值,所以涉及小數的比較和運算要特別小心。根據標準,位浮點數的指數部分的長度是個二進制位,意味著指數部分的最大值是的次方減。也就是說,位浮點數的指數部分的值最大為。 一 前言 這篇文章主要解決以下三個問題: 問題1:浮點數計算精確度的問題 0.1 + 0.2; //0.30000000000000004 0.1 + 0.2 === 0.3; // ...

    williamwen1986 評論0 收藏0
  • JavaScript權威指南筆記(上)-語言核心

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

    skinner 評論0 收藏0

發表評論

0條評論

Lin_R

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<