很明顯字尾00001跟預期想要的不一致,起初面臨這個問題我的處理方式是這樣的:
(1234*0.01).tostring().substring(0,2)+"."+(1234*0.01).tostring().substring(2,4)
這樣子雖然可行,但是當接收的引數1234是其他長度的話又得做一堆判斷,格外不方便。
後來問了我的兒子,我兒子告訴我用tofixed,隨之我搜尋了js tofixed。
tofixed() 方法可把 number 四捨五入為指定小數字數的數字。
同時用來處理我原先那種低端的精度損失是相當不錯的。
再搜尋了一下tofixed,我的做法並非達到完美,還是存在一些不理想的情況,等出了問題再看下面這兩篇吧。
obk,繼續追番
js之toFixed()四捨五入丟失精度的問題解決
1 tofixed方法 tofixed 方法可把 number 四捨五入為指定小數字數的數字。例如將資料num保留2位小數,則表示為 tofixed num 但是其四捨五入的規則與數學中的規則不同,使用的是銀行家捨入規則,銀行家捨入 所謂銀行家捨入法,其實質是一種四捨六入五取偶 又稱四捨六入五留雙 ...
double型別精度損失問題
在十進位制中小數有些是無法完整用二進位制表示的。它們只能用有限位來表示,從而在儲存時可能就會有誤差。十進位制的小數採用乘2取整法進行計算,去掉整數部分後,剩下的小數繼續乘以2,直到小數部分全為0.有的小數可能取不到零就會一直迴圈 0.9 2 1.8 取整1 0.8 2 1.6 取整1 0.6 2 1...
BigDecimal解決精度損失的問題
1 system.out.println 中的數字預設是double型別的,double型別小數計算不精準。2 使用bigdecimal類構造方法傳入double型別時,計算的結果也是不精確的!因為不是所有的浮點數都能夠被精確的表示成乙個double 型別值,有些浮點數值不能夠被精確的表示成 dou...