關於JS的浮點數計算精度問題解決方案
由於接觸JS不久,關於JS的浮點數的計算更是之前沒有用過,這次寫JS專案發現的這個問題:0.1+0.2=0.3000000000004,為什麼會出現這麼奇怪的問題呢 ?在網上找了一些資料,JS作為解釋性語言,直接計算會有浮點數精度丟失問題。 門弱型別語言的JavaScript ,從設計思想上就沒有對浮點數有個嚴格的資料型別。
解決方案:
一. 有種最簡單的解決方案,就是給出明確的精度要求,在返回值的過程中,計算機會自動四捨五入,比如:
var numA = 0.1; var numB = 0.2; alert( parseFloat((numA + numB).toFixed(2)) === 0.3 );
用這種方法在測試過程中也有問題,例如6.8-0.4列印為6.3,本應為6.4所以這裡轉換結果還是不正確。
在浮點數計算的時候,很多時候產生的都是這種極限資料,如果要精確進行整數轉換,要放大的倍數過大。這裡我們可以用四捨五入對轉換的過程進行最佳化:
Math.round((6.8-0.9)*10);//四捨五入59
最佳化之後的自定義函式:
Math.formatFloat = function(f, digit) { var m = Math.pow(10, digit); return parseInt(f * m, 10) / m; } var A = 0.1; var B = 0.2;console.log(Math.formatFloat(A + B, 1) === 0.3);
因此,為了避免產生精度差異,我們要把需要計算的數字乘以 10 的 n 次冪,換算成計算機能夠精確識別的整數,然後再除以 10 的 n 次冪,大部分程式語言都是這樣處理精度差異的,我們就借用過來處理一下 JS 中的浮點數精度誤差。
作者:honey緣木魚
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/132/viewspace-2814414/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript解決浮點數算數運算精度問題JavaScript
- JS中浮點數精度問題JS
- Golang浮點數精度丟失問題擴充套件包解決方案Golang套件
- iOS浮點數精度問題iOS
- 如何避免JS浮點運算的精度問題(例:0.1+0.7=0.7999999999999999)JS
- [Java] 浮點數的精度丟失問題與精度控制方法Java
- 全面總結 JS 中浮點數運算問題JS
- JS四則運算與四捨五入精度問題及解決方案JS
- JavaScript中解決計算精度丟失的問題JavaScript
- js浮點數丟失問題JS
- js精確計算浮點數相加JS
- js中浮點數計算常用方法JS
- js浮點數儲存精度丟失原理JS
- WebGL著色器32位浮點數精度損失問題Web
- js處理浮點數計算誤差JS
- 探尋 JavaScript 精度問題以及解決方案JavaScript
- 記錄--前端金額運算精度丟失問題及解決方案前端
- 一行程式碼解決JS數字大於2^53精度錯誤的問題行程JS
- php 處理 浮點數 精度運算 數字處理等PHP
- 一個關於JS解決陣列相乘問題JS陣列
- JS toFixed 精度問題JS
- 圖解計算機中的數值範圍和浮點運算圖解計算機
- JS中toFixed()方法的問題及解決方案JS
- JS計算精度小記JS
- LibBF——處理任意精度浮點數的小型庫
- 關於Failed to resolve的問題解決AI
- 關於分散式事務帶來的問題及解決方案分散式
- 關於js執行緒問題的解讀JS執行緒
- 解決Hexo關於圖片的問題Hexo
- 關於解決問題的幾個段位
- 怎樣成為解決問題的高手?——關於問題解決的關鍵4步驟
- 浮點數在計算機底層的表示及運算計算機
- 關於int型別數值的運算問題型別
- 浮點數線上轉hex計算工具
- 浮動坍塌的解決方案
- 0.1+0.2不等於0.3,微信小程式雲開發如何解決JavaScript小數計算精度失準的問題微信小程式JavaScript
- 關於Unsupported major.minor version 52.0報錯問題解決方案
- 你不知道的JavaScript--Item2 浮點數精度JavaScript