0.1 + 0.2 == 0.3 ?

@fwon 2017-03-01 07:20:58发表于 fwon/blog

JavaScript采用的是IEEE 754规范的二进制浮点数计算方法,由于精度问题。导致0.1+0.2不等于0.3。

解决办法:设置一个误差范围值,通常称为"机器精度",对JavaScript的数字来说,这个值通常是2^-52

在ES6中,该精度值定义在Number.EPSILON中。

if (!Number.EPSILON) {
	Number.EPSILON = Math.pow(2, -52);
}

function numbersCloseEnoughToEqual(n1, n2) {
	return Math.abs(n1 - n2) < Number.EPSILON;
}

var a = 0.1 + 0.2;
var b = 0.3;

numbersCloseEnoughToEqual(a, b); //true
numbersCloseEnoughToEqual(0.0000001, 0.0000002); //false