JavaScript學習(六十四)—關于JS的浮點數計算精度問題解決方案
您的語言沒有中斷,它正在執行浮點數學運算,計算機只能本地存盤整數,因此它們需要某種表示十進制數字的方式,此表示并不完全準確,這就是為什么(通常不是)的原因
0.1 + 0.2 != 0.3,
為什么會這樣呢?
- 實際上,這很有趣,當您有一個以10為底的系統(如我們的系統)時,它只能表達使用該底數的質數的分數,10的素數是2和5,因此,由于分母都使用10的素數,所以1 / 2、1 / 4、1 / 5、1 / 8和1/10都可以清楚地表示, / 3、1 / 6、1 /
7和1/9都是重復的小數,因為它們的分母使用3或7的質數, - 在二進制(或以2為基數)中,唯一的質數是2,因此您只能清楚地表達分母只有2作為質數的分數,以二進制形式,1 / 2、1 / 4、1 /8都將干凈地表示為小數,而1/5或1/10將重復小數,
- 因此,在以10為基數的系統中,干凈的小數點為0.1和0.2(1/10和1/5),是在計算機使用的以2為基數的系統中重復小數點,當您對這些重復的小數進行數學運算時,最侄訓剩下剩余的錢,這些剩余筆錢會在您將計算機的以2為底的(二進制)數字轉換為更易于理解的以10為底的表示形式時保留下來…
以下是使用.1 + .2多種語言發送到標準輸出的一些示例,








今天在計算商品金額的時候再次遇到js浮點數計算出現誤差的問題,以前就一直碰到這個問題0.1+0.2=0.3000000000004 那么,如何解決呢?
方案一:四舍五入法
- 使用toFixed方法進行四舍五入也不是很精準,對于計算金額這種嚴謹的問題,不推薦使用
console.log(parseFloat((0.1 + 0.2).toFixed(2)));//0.3
方案二:擴大倍數法
- 把需要計算的數字升級(乘以10的n次冪)成計算機能夠精確識別的整數,等計算完畢再降級(除以10的n次冪),這是大部分編程語言處理精度差異的通用方法,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282111.html
標籤:其他
