正文
0.1
和 0.2
在转换成二进制后会无限循环,由于标准位数的限制后面多余的位数会被截掉,此时就已经出现了精度的损失,相加后因浮点数小数位的限制而截断的二进制数字在转换为十进制就会变成 0.30000000000000004
。
众所周知,JavaScript 仅有 Number 这个数值类型,而 Number 采用的是 IEEE 754 64 位双精度浮点数编码。
也就是说,不仅是 JavaScript 会产生这种问题,只要是采用 IEEE 754 Floating-point 的浮点数编码方式来表示浮点数时,则会产生这类问题。
References
- https://0.30000000000000004.com/
- JS魔法堂:彻底理解 0.1 + 0.2 === 0.30000000000000004 的背后
- 如何解决 0.1 +0.2 === 0.30000000000000004 类问题