关于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);
		}

猜你喜欢

转载自blog.csdn.net/Aproducer/article/details/82793927