關於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
- JS中浮點數精度問題JS
- javascript浮點數計算精度問題介紹JavaScript
- Golang浮點數精度丟失問題擴充套件包解決方案Golang套件
- iOS浮點數精度問題iOS
- 【求教:如何解決 java 浮點數精度問題】Java
- 一個浮點數計算的問題
- [Java] 浮點數的精度丟失問題與精度控制方法Java
- JavaScript中解決計算精度丟失的問題JavaScript
- 【轉】JS浮點數運算Bug的解決辦法JS
- 全面總結 JS 中浮點數運算問題JS
- JS四則運算與四捨五入精度問題及解決方案JS
- Java浮點數float,bigdecimal和double精確計算的精度誤差問題總結JavaDecimal
- js浮點數丟失問題JS
- js中浮點數計算常用方法JS
- js精確計算浮點數相加JS
- WebGL著色器32位浮點數精度損失問題Web
- js浮點數儲存精度丟失原理JS
- 精度計算問題
- js處理浮點數計算誤差JS
- 探尋 JavaScript 精度問題以及解決方案JavaScript
- JavaScript 浮點數及運算精度調整總結JavaScript
- Java浮點數計算Java
- 記錄--前端金額運算精度丟失問題及解決方案前端
- php 處理 浮點數 精度運算 數字處理等PHP
- 一行程式碼解決JS數字大於2^53精度錯誤的問題行程JS
- 關於javascript中對浮點加,減,乘,除的精度分析JavaScript
- cocos2dx3.2 關於計算兩點向量normalize問題的解決辦法ORM
- JavaScript 小數乘法運算精度問題JavaScript
- 有關 PHP 和 js 浮點運算的坑PHPJS
- Oracle關於week的計算問題Oracle
- 關於日期計算的問題 (轉)
- 圖解計算機中的數值範圍和浮點運算圖解計算機
- PHP浮點數的精確計算BCMathPHP
- JDK1.2關於JDBC中文問題的解決方案 (轉)JDKJDBC
- 一個關於JS解決陣列相乘問題JS陣列
- 浮點數線上轉hex計算工具