递增<;1在Javascript中

递增<;1在Javascript中,javascript,floating-point,Javascript,Floating Point,我刚刚对for循环进行了实验,当我将增量值更改为I+=0.1时注意到了这一点 for (i = 0; i < 100; i += 0.1) { console.log(i); } 当你达到100岁时 99.69999999999861 99.7999999999986 99.8999999999986 99.9999999999986 这背后的原因是什么? 我想如果你试图搜索一个数字,这将是令人沮丧的。有办法绕道到最近的10号吗?我知道如何用Math.floor、~~,a |

我刚刚对for循环进行了实验,当我将增量值更改为
I+=0.1
时注意到了这一点

for (i = 0; i < 100; i += 0.1) {
    console.log(i);
}
当你达到100岁时

99.69999999999861
99.7999999999986
99.8999999999986
99.9999999999986
这背后的原因是什么?
我想如果你试图搜索一个数字,这将是令人沮丧的。有办法绕道到最近的10号吗?我知道如何用
Math.floor、~~,a | 0
四舍五入,但只能是最接近的整数。

简单的解决方案:乘十,加一,除十

for (var i = 0; i < 100; i = (i * 10 + 1) / 10) {
  console.log(i);
}
(变量i=0;i<100;i=(i*10+1)/10)的
{
控制台日志(i);
}
(变量i=0;i<100;i=(i*10+1)/10)的
{
控制台日志(i);

}
我想你正在寻找这样的东西:

(i=0;i<100;i+=0.1)的
{
控制台日志(数学循环(i*100)/100);

}
您真正的问题是什么?请先读一读我听说过的“浮点精度”。谢谢也许会有帮助。将不精确的值乘以10并不能使其更精确。最好尽量避免浮点计算
for(var i=0;i<1000;i++){console.log(i/10.0);}
您不是将一个“不精确”的浮点值乘以10,而是将一个整数乘以10,再加上1,最后除以10,以避免另一种情况,即加0.1。对于前者,您将执行整数加法,然后除以10生成一个浮点(对于回答这个问题来说,这个浮点足够精确)。对于后者,您直接添加浮动,这不够精确。
for (var i = 0; i < 100; i = (i * 10 + 1) / 10) {
  console.log(i);
}