先來看一個奇怪的現象:
console.log((0.1 + 0.2) === (0.3)); // false
上面 運算式 比較了 0.1 + 0.2 和 0.3 是否相等,並且我們期待結果會是 true
事實上卻是 false ,怎麼了?
事實上電腦由於底層機制是以2進制實作,我們平常運算數學等等其實也是都是以二進制的近似值來運算,不可能所有值都能模擬10進制到100%精確,所以上面就是一個經典的差異結果,例如像 float 的運算就常常會有這樣的狀況產生。
那如果我們有時有需求要將 float 運算作為明確結果來判斷進行運用,該怎麼做呢? 其實有很多種方式,最簡單可以用**.toFixed()**:
console.log((0.1 + 0.2).toFixed(1) === (0.3).toFixed(1)); // true
如上,兩數字都被取到小數點第 1 位的精確值,判斷結果為 true.
toFixed() 的參數為數字,會去小數點到第參數位,所以若要進似至整數就是 number.toFixed(0**)**
, 若不輸入預設也是0。