<分区>
for (var i = 0; i < 10; i += .1) {
}
console.log(i) === 10.09999999999998
但是...
for (var i = 0; i < 10; i += 1/8) {
}
console.log(i) === 10
为什么递增1/8结果是整数?
标签 javascript
<分区>
for (var i = 0; i < 10; i += .1) {
}
console.log(i) === 10.09999999999998
但是...
for (var i = 0; i < 10; i += 1/8) {
}
console.log(i) === 10
为什么递增1/8结果是整数?
最佳答案
因为 1/8 可以精确表示为以 2 为底的(二进制)分数,但 0.1 不能。 1/8 是 2 的负三次方,但 0.1 不是 2 的任何整数次方。浮点值以二进制形式存储,因此与对 2 的非整数幂的数学相比,对 2 的整数幂的数学更有可能返回精确值。
也就是说,最好假设没有浮点运算是完全精确的。不同的语言和处理器可能会给出不同的结果,所以不要指望 1/8 求和在任何地方都有效。
关于javascript 增加 1/8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34494177/