關於JavaScript中0.1+0.2=0.30000000000000004的問題

不只是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);
		}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章