不只是JavaScript,所有遵循IEEE754規範的語言都會出現這麼一個問題
0.1+0.2=0.30000000000000004
簡單來說,出現這種問題的原因是二進制浮點數中的0.1和0.2並不十分精確
所以最常見的方法是設定一個誤差值來判斷0.1+0.2是否和0.3相等
而這個誤差值通常是2^-52(2.220446049250313e-16)
從ES6開始,該值定義在Number.EPSILON中,我們可以直接拿來用
num = 0.1 + 0.2;
console.log((Math.abs(num - 0.3) < Number.EPSILON) ? 0.3 : num); //0.3
也可以爲ES6之前的版本寫一個polyfill
if(!Number.EPSILON) {
Number.EPSILON = Math.pow(2, -52);
}