Javascript 在循环中从1中减去.1时未达到预期结果
当我创建一个循环来从一个值为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
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);
}