在 JavaScript 中的整數與浮點數其實都是屬用 Number 的數據類型,所有數字都是以 64 位浮點
根据国际标准 IEEE 754,JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的。
JavaScript 的數值有很多種表示方式
123e3 // 123000
123e-3 // 0.123
-3.1E+12
.1e-23
科學計數法允許 e / E 後面帶一個整數,表示這個數值的指數部分。
有兩種情況 JavaScript 會將數值自動轉換為科學計數法表示
- 小數點前的數字多於 21 位
1234567890123456789012
// 1.2345678901234568e+21
- 小數點後的零多於 5 個
0.0000003 // 3e-7
這其實在做精度顯示的時候特別煩人,尤其像是區塊鏈上的資產顯示時,甚至在計算上也會有精度上的誤差,並竟 JavaScript 上沒有真正的 decimal。
為了解決這個問題最快的方式就不自己造輪子啦,我是直接用人家寫好的 Library 去處理。
這裡推薦 MikeMcl/decimal.js 就能夠解釋這種精度顯示的惱人問題了。