为什么在JavaScript里0.1 + 0.2不是等于0.3?

根据浮点数的定义,非整数的Number类型无法用 ==(===也不行) 来比较,一段著名的代码,为什么在JavaScript中,0.1+0.2不能=0.3:·

1
console.log( 0.1 + 0.2 == 0.3);

这里输出的结果是false,说明两边不相等的,这是浮点运算的特点,浮点数运算的精度问题导致等式左右的结果并不是严格相等,而是相差了个微小的值。

所以实际上,这里错误的不是结论,而是比较的方法,正确的比较方法是使用JavaScript提供的最小精度值:

1
console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON);

检查等式左右两边差的绝对值是否小于最小精度,才是正确的比较浮点数的方法。这段代码结果就是 true 了。


为什么在JavaScript里0.1 + 0.2不是等于0.3?
https://thaneyang.github.io/2022/03/为什么在JavaScript里0-1-0-2不是等于0-3?.html
作者
ThaneYang
发布于
2022年3月20日
许可协议