0.1 + 0.2 = ?
whck6
面試常被問的一題。
var a = 0.1 + 0.2;
if (a === 0.3) {
// never into, why?
}
這段程式碼有很高的機率會是 false
甚至可以說一定會是
false
,為什麼呢?市面上常見的程式語言,理論上都會遇到這個陷阱,尤其是像 js
這類的動態語言。當然!這也不是什麼困難問題,隨便 google
一下就知道怎麼解了,這邊我就簡單記錄一下,順帶一提,根本原因是系統對於浮點數的儲存原理,有興趣請自行上網搜尋。
解法
Number.EPSILON
利用相減後的差額是否小於 Number.EPSILON
來判定是否成立
if (Math.abs(a - 0.3) < Number.EPSILON) {
// if true, a = 0.3
}