无法理解javascript行为

时间:2016-11-14 07:15:34

标签: javascript

我正在尝试执行以下代码

var n = 100;
var sum =0;
while(n>0)
{
sum = sum + n%10;
n = n/10;
}
console.log(sum);

结果应为1但javascript正在返回

  

1.1111111111111112

另外,当我运行个别陈述时,它给出了非常好的结果, 可能的原因是什么?

2 个答案:

答案 0 :(得分:7)

它给出的结果是正确的 -

让我们进入while循环

对于第一次迭代,n = 100,因此n%10 = 0且sum = 0,在第一次循环sum = 0和n = 10之后

在第二次迭代中,n%10 = 0且sum = 0, 在第二次迭代之后sum = 0并且n = 1

对于第三次迭代,n%10 = 1且sum = 0, 在第三次迭代之后sum = 1且n = 0.1

对于第四次迭代,n%10 = 0.1且sum = 1, 在第四次迭代之后sum = 1.1并且n = 0.01

依此类推

最后答案是1.1111111111 .......趋于无限,所以它变成了1.1111111111111112

希望这有帮助

修改

如果您希望最终答案为1,则初始化n为0.9(n = 0.9)

答案 1 :(得分:2)

不,结果不会是1.请注意,你的循环在每次迭代时将n除以10,并且连续条件为n > 0,这将需要多次迭代直到它发生:

  • n = 100,n%10 = 0
  • n = 10,n%10 = 0
  • n = 1,n%10 = 1
  • n = 0.1,n%10 = 0.1
  • n = 0.01,n%10 = 0.01
  • ...

所以,结果是正确的:1.1111111 ...最后的2不超过舍入十进制误差(最小值)。