Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在循环中从1中减去.1时未达到预期结果_Javascript - Fatal编程技术网

Javascript 在循环中从1中减去.1时未达到预期结果

Javascript 在循环中从1中减去.1时未达到预期结果,javascript,Javascript,当我创建一个循环来从一个值为1的变量中减去.1时,几轮之后的输出结果是一个长的浮点数字,末尾有额外的数字。为什么我会得到以下结果而不是预期的结果 var x = 1; for (var y = 0; y < 10; y++) { x-=.1; console.log(x); } var x=1; 对于(变量y=0;y

当我创建一个循环来从一个值为1的变量中减去.1时,几轮之后的输出结果是一个长的浮点数字,末尾有额外的数字。为什么我会得到以下结果而不是预期的结果

var x = 1;
for (var y = 0; y < 10; y++) {
    x-=.1; 
    console.log(x);
}
var x=1;
对于(变量y=0;y<10;y++){
x-=.1;
控制台日志(x);
}
以及控制台输出给出的结果:

0.9

0.8

700000000000001

6000000000000001

5000000000000001

0.40000000000000013

300000000000000016

200000000015

0.100000000000014

1.387777807814457E-16


但是,当我从1中减去.3时,控制台输出会给出预期的.7值。这是JavaScript实现中特定于浏览器的问题吗?

这是舍入错误。在使用浮点数进行计算时,每种语言都有这种功能。如果你想要正确的数字,你必须四舍五入

查看本页上的章节舍入误差

var x=10;
对于(变量y=0;y<10;y++){
x-=1;
控制台日志(数学循环(x)/10);
}

这是小提琴,当您在控制台中执行
0.8-0.1
时,您会得到0.7000001的小提琴,这很有趣。我用数学解决了舍入错误。舍入(10*x)/10,但我以前从未遇到过这个问题。我想知道为什么会发生这种情况。看看这里的舍入误差一章。据我所知,TS因舍入误差而摇摆不定。上面对他的代码进行的非常简单和小的修改解决了这个问题。复杂的浮点在javascript中确实是一个难题。因此,尝试在“.”之前进行计算,方法是将基数乘以10/100/1000或其他数值。然后进行计算并再次除以。金融应用程序和数据库对它们的货币值也做同样的处理,它们被乘以1000以确保(几乎)没有舍入错误。
var x = 10;
for (var y = 0; y < 10; y++) {
    x-=1; 
    console.log(Math.round(x)/10);
}