一般做的時候需要注意一下,如果兩個浮點數想加的值為0.8 而他的實際值是0.79999……需要進行處理!
uj5u.com熱心網友回復:
0.7999999999.toFixed(1)uj5u.com熱心網友回復:
這個問題我的博客有講解可以看下https://blog.csdn.net/xsl510079027/article/details/86686551uj5u.com熱心網友回復:
首先,這并不是JS本身的精度問題,JS表示自己不能背這口黑鍋。這其實就是我們計算機本身的問題,是的,你沒有聽錯,就是電腦本身的問題。
我們的計算機在進行內部存盤資料的編碼的時候,0.1本身就不是一個精確的數字0.1,它的誤差極小,以至于計算機將其顯示成0.1。
當我們的代碼在被計算機編譯的時候,0.1會被計算機解碼為一個與真實的0.1本身極為相近的計算機內部編碼數字,即是0.000110011001 1001...,同樣的0.2和0.3等等也一個道理。也就說,在計算機還沒有開始的時候,一個極小的舍入錯誤就已經產生了,這也是為什么我們所見到的結果與我們所預想的不一樣的根本原因。
說了這么多,那為什么最后會等于0.7999999999999999 這樣一個結果呢?這是因為我們所使用的雙精度浮點數的小數部分最多只能支持 52 位兩個無限回圈的二進制數都分別在其第52位處截斷相加,最終就會得到這一結果。
至于處理的辦法,樓上的老哥的博客寫了是用toFixed,確實,這樣也可以,emmm,但是怎么嗦呢,其實我不喜歡這種解法。
我個人的解決方法傾向于將資料本身乘以10的n次方最后再除以N次方的方法來解決。因為我們的計算機中的二進制可以精確地表示位數有限且分母是2的倍數的小數,這樣一來的換算就沒有浮點數舍入誤差啦~
uj5u.com熱心網友回復:
謝謝你的科普
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/50232.html
標籤:JavaScript
上一篇:關于線上簽訂勞務合同的開發問題
