精度丟失主要有是哪方面
1.小數(shù)計算
如:0.1+0.2 !== 0.3;0.1*0.2 !== 0.03;
2.大數(shù)計算
如:9999999999999999 === 10000000000000001;
3.toFixed()四舍五入不準
如:1.335.toFixed(2) // 1.33;1.336.toFixed(2) // 1.34;
計算不準確的原因
二進制模仿十進制進行四舍五入,而二進制只有0和1,于是就0舍1入,于是就導致了小數(shù)計算不精確。大數(shù)的精度丟失本質上是和小數(shù)一樣,js中表示最大的數(shù)是Math.pow(2, 53),十進制即 9007199254740992;大于該數(shù)的值可能會丟失精度。
怎么解決
小數(shù)的話,一般轉成整數(shù)進行計算,然后對結果做除法;同樣也可以直接對結果進行4舍5入;
對于大數(shù)出現(xiàn)的問題概率較低,畢竟還要運算結果不超過最大數(shù)就不會丟失精度;
參考來源
javaScript數(shù)字精度丟失問題總結
js中精度問題以及解決方案
JavaScript 中精度問題以及解決方案