iT邦幫忙

0

關於javascript 0.3/0.1 != 3

  • 分享至 

  • xImage

各位大大好
最近在練習javascript
if(a/b == 3){
//do something
}
結果當a=0.3, b=0.1 時是進不去的
查了一下發現
0.3/0.1 = 2.9999999999999996
0.03/0.01 = 3 //正常
0.33/0.1 = 3.3 //正常
3/0.1 = 30 //正常
0.3/0.01 = 30 //正常

關於那個0.3/0.1 != 3
想請問一下有人知道原因嗎? 謝謝

dragonH iT邦超人 5 級 ‧ 2020-06-15 10:45:56 檢舉
https://juejin.im/post/5b90e00e6fb9a05cf9080dff
dragonH iT邦超人 5 級 ‧ 2020-06-15 10:50:18 檢舉
0.1 + 0.2 也不會等於 0.3
Season iT邦研究生 3 級 ‧ 2020-06-15 13:15:42 檢舉
謝謝回答 看過文章後大致上了解原因了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
通靈亡
iT邦高手 1 級 ‧ 2020-06-15 11:53:10
最佳解答

原因的部分
保哥的這篇文章可以參考一下:

由於 JavaScript 使用浮點數計算所有數值,主要原因還是在於計算機最底層都採用 2 進制描述所有數值
十進制的 0.1 與 0.2 換算成二進制之後,都是無法精準表達的數值。

前端工程研究:關於 JavaScript 中 Number 型別的常見地雷與建議作法

Season iT邦研究生 3 級 ‧ 2020-06-15 13:15:48 檢舉

謝謝回答 看過文章後大致上了解原因了

0

其實這個問題也會在其它語言也會發生。
,只要使用了精準數值就很容易這樣。

一般來說會搭配一下整數處理或是四捨五入。

Season iT邦研究生 3 級 ‧ 2020-06-15 14:08:10 檢舉

恩 我測PHP與GO 做單純輸出是
0.1+0.2=0.3
0.3/0.1 = 3
C# 與 js 就會有精準度差的問題
目前是先處理成整數再做處理

我要發表回答

立即登入回答