简单的for循环让我失去一个循环 - 十进制增量错误

时间:2018-05-16 00:34:45

标签: javascript

我尝试了一个简单的for循环,但得到了奇怪的结果。我以小数(.02)递增,但似乎添加不正确。

这是循环:

for ( var a = 0; a <= 10; a += .02 ) {

    console.log(a);

}

结果很好......

0, 0.02, 0.04, 0.06, 0.08, 0.1
然后它有点奇怪:

0.12000000000000001

然后它真的很远:

0.19999999999999998 ... 9.999999999999876

除了奇数小数加法之外,它还没有达到我的最终目标10。

我已经尝试for (var a = 0; a <= 10; a = (Math.round(a * 100)/100) + .02 )(这让我最接近,但仍然是奇数),解析a,甚至是+ = 2/100。

while循环中的结果相同。

任何想法都会很棒!

编辑:虽然在这篇文章中有一些关于浮点精度的解决方法&#34; How to deal with floating point number precision in JavaScript?&#34; - 我不确定在循环结构中有多少优雅适合

1 个答案:

答案 0 :(得分:2)

您可以使用toFixed(2)

for ( var a = 0; a <= 10;) {
    console.log(a);
    a += 0.02;
    a = +a.toFixed(2)
}
   
// Another possible way is
var limit = 10;
var increment = 0.02;
for ( var a = 0; a <= limit * 100; a += increment * 100) {
    console.log(a / 100);
}