Javascript -=0.1奇怪的结果

Javascript -=0.1奇怪的结果,javascript,floating-point,Javascript,Floating Point,可能重复: JavaScript代码: var n = 1; while ( n > 0 ) { n -= 0.1; document.body.innerHTML += n + "<br/>"; } 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0.9 0.8 0.7000000000000001 0.6000000000000001 0.5000000000000001 0.40000000000000013 0.3000000

可能重复:

JavaScript代码:

var n = 1; 
while ( n > 0 )
{
  n -= 0.1;
  document.body.innerHTML += n + "<br/>";
}
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0.9
0.8
0.7000000000000001
0.6000000000000001
0.5000000000000001
0.40000000000000013
0.30000000000000016
0.20000000000000015
0.10000000000000014
1.3877787807814457e-16
-0.09999999999999987
但是得到了这个:

var n = 1; 
while ( n > 0 )
{
  n -= 0.1;
  document.body.innerHTML += n + "<br/>";
}
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0.9
0.8
0.7000000000000001
0.6000000000000001
0.5000000000000001
0.40000000000000013
0.30000000000000016
0.20000000000000015
0.10000000000000014
1.3877787807814457e-16
-0.09999999999999987

有人能解释一下那里发生了什么吗?

你看到的是计算机做浮点运算的方式。例如,请参见,

并非所有数字都可以精确表示,即使它们有一个简单的十进制表示法。这是因为JavaScript使用表示浮点值,因此使用基数2而不是基数10。这将导致您实际上并没有减去0.1(即使您的源代码这么说),而是减去一些接近0.1的值。

您处理的是一个浮点数。查看toFixed和toPrecision方法。

这将解决您的问题

var n=1;
而(n>0){
n-=0.1;
结果=n.toFixed(1);
document.body.innerHTML+=结果+“
”; }
来自:

为什么我的数字,比如0.1+0.2加起来不等于0.3,然后 相反,我得到了一个奇怪的结果,比如 300000000000000004?

因为在内部,计算机使用 格式(二进制浮点)为 不能准确地表示一个数字 比如0.1、0.2或0.3

当代码被编译或 已解释,您的“0.1”已 四舍五入到该表中最接近的数字 格式,这将导致 舍入误差甚至在 计算发生了


被这么多人愚弄或欺骗。参见。+1。这应该是公认的答案(或者我的答案)。