Nic Lin's Blog

喜歡在地上滾的工程師

如何避免 JavaScript 中的科學計數法 1e-5, 1e-6...

在 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 就能夠解釋這種精度顯示的惱人問題了。

comments powered by Disqus