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);
相關文章
- 關於JS的浮點數計算精度問題解決方案JS
- php 處理 浮點數 精度運算 數字處理等PHP
- iOS浮點數精度問題iOS
- 全面總結 JS 中浮點數運算問題JS
- JS中浮點數精度問題JS
- JavaScript中解決計算精度丟失的問題JavaScript
- 如何避免JS浮點運算的精度問題(例:0.1+0.7=0.7999999999999999)JS
- Golang浮點數精度丟失問題擴充套件包解決方案Golang套件
- 高精度數學運算
- 深入理解浮點數的運算
- 圖解計算機中的數值範圍和浮點運算圖解計算機
- [Java] 浮點數的精度丟失問題與精度控制方法Java
- python中精確的浮點數運算Python
- Python做浮點數(float)運算要小心Python
- Python浮點數(小數)運算誤差的原因和解決辦法Python
- 浮點數在計算機底層的表示及運算計算機
- JavaScript浮點數加減乘除精確計算JavaScript
- 浮點數的加減乘除運算細節
- WebGL著色器32位浮點數精度損失問題Web
- 記錄--前端金額運算精度丟失問題及解決方案前端
- 計組之資料運算:9、浮點數的表示
- 計算水仙花數運算超時問題
- JS四則運算與四捨五入精度問題及解決方案JS
- 你不知道的JavaScript--Item2 浮點數精度JavaScript
- JavaScript加減乘數運算JavaScript
- js精確計算浮點數相加JS
- js中浮點數計算常用方法JS
- Java中的小數運算與精度損失Java
- 浮點數線上轉hex計算工具
- js處理浮點數計算誤差JS
- JavaScript數字開任意次方運算JavaScript
- js浮點數丟失問題JS
- 探尋 JavaScript 精度問題以及解決方案JavaScript
- Shell階段02 shell變數運算(整數運算/小數運算), shell變數案例變數
- 如何巧妙著運用「位運算」來解決問題?
- 計算機組成原理浮點數加減計算機
- js浮點數儲存精度丟失原理JS
- JavaScript浮點數保留兩位小數JavaScript