# 0.1+0.2不等于0.3

在正常的数学逻辑思维中,0.1+0.2=0.3这个逻辑是正确的,但是在JavaScript中0.1+0.2 !== 0.3,这是为什么呢?

在JavaScript中的二进制的浮点数0.1和0.2并不是十分精确,在他们相加的结果并非正好等于0.3,而是一个比较接近的数字 0.30000000000000004,所以条件判断结果为false

如何解决呢?🤔️

应该怎样来解决0.1+0.2等于0.3呢?

最好的方法是设置一个误差范围值,通常称为"机器精度",而对于Javascript来说,这个值通常是 2^-52,而在ES6中,已经为我们提供了这样一个属性: Number.EPSILON,而这个值正等于 2^-52

Number.EPSILON = (function () {
    return Number.EPSILON ? Number.EPSILON : Math.pow(2, -52)
})()

function numberSequal(a, b) {
    return Math.abs(a - b) < Number.EPSILON
}
console.log(numberSequal(0.1 + 0.2, 0.3));

如果感兴趣,可以查阅这篇文章,完整的解释了为什么 0.1+0.2!==0.3

更新时间: 12/9/2020, 9:34:18 PM