JavaScript解決浮點數算數運算精度問題
JavaScript浮點數進行算數運算可能會產生誤差,下面就簡單介紹一下如何避免誤差的出現。
首先看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let a=0.1; let b=0.2; console.log((a+b)==0.3);
以上程式碼看起來返回值為true應該是毫無疑問的,但是事實恰好相反。
計算機真正讀懂的是二進位制數字而不是十進位制數字,所以一切算數運算最後都要轉換為二進位制數字。
[JavaScript] 純文字檢視 複製程式碼執行程式碼console.log((0.1).toString(2)); console.log((0.2).toString(2));
上面是轉換為二進位制的程式碼,其實輸出結果被截斷了,因為雙精度浮點數的小數部分最多支援 52 位,兩者相加之後得到這麼一串 0.0100110011001100110011001100110011001100110011001100 因浮點數小數位的限制而截斷的二進位制數字,這時候,我們再把它轉換為十進位制,就成了 0.30000000000000004。當然c#和java這樣的語言應該也有這樣的問題,只是它們進行了相關的封裝,所以程式設計人員就無需擔憂了。
解決方案:
既然浮點數計算可能出現問題,那麼就將浮點數轉換為整數,然後再進行相關操作就可以了。
程式碼如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼var a=0.1; var b=0.2; console.log((a*10+b*10)/10==0.3);
以上程式碼實現了我們的要求,也詮釋瞭解決的原理。下面是一個通用程式碼:
[JavaScript] 純文字檢視 複製程式碼執行程式碼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);
相關文章
- javascript浮點數計算精度問題介紹JavaScript
- js算數運算精度問題解決方案JS
- JavaScript 浮點數及運算精度調整總結JavaScript
- JavaScript 小數乘法運算精度問題JavaScript
- 關於JS的浮點數計算精度問題解決方案JS
- php 處理 浮點數 精度運算 數字處理等PHP
- javascript小數乘法運算導致的精度問題JavaScript
- iOS浮點數精度問題iOS
- 全面總結 JS 中浮點數運算問題JS
- JS中浮點數精度問題JS
- 【求教:如何解決 java 浮點數精度問題】Java
- 【轉】JS浮點數運算Bug的解決辦法JS
- 一個浮點數計算的問題
- 深入理解浮點數的運算
- Golang浮點數精度丟失問題擴充套件包解決方案Golang套件
- JavaScript中解決計算精度丟失的問題JavaScript
- 圖解計算機中的數值範圍和浮點運算圖解計算機
- javascript浮點數精確計算程式碼JavaScript
- Java浮點數計算Java
- 浮點數在計算機底層的表示及運算計算機
- Python浮點數(小數)運算誤差的原因和解決辦法Python
- python中精確的浮點數運算Python
- Python做浮點數(float)運算要小心Python
- 浮點數的加減乘除運算細節
- JavaScript浮點數加減乘除精確計算JavaScript
- Java浮點數float,bigdecimal和double精確計算的精度誤差問題總結JavaDecimal
- WebGL著色器32位浮點數精度損失問題Web
- 記錄--前端金額運算精度丟失問題及解決方案前端
- javascript如何解決浮點數相乘出現誤差問題JavaScript
- 計組之資料運算:9、浮點數的表示
- 為什麼php的浮點數運算不準確PHP
- 計算水仙花數運算超時問題
- 精度計算問題
- 計算機中的浮點運算計算機
- JS四則運算與四捨五入精度問題及解決方案JS
- JavaScript加減乘數運算JavaScript
- js中浮點數計算常用方法JS
- js精確計算浮點數相加JS