Javascript int数字添加问题

时间:2010-03-05 09:21:09

标签: javascript

我在javascript中有从01(int)到09(int)的数字,我想为每一个添加1(int)。

例如:

01 + 1 = 2
02 + 1 = 3

但是

08 + 1 = 1
09 + 1 = 1

我知道解决方案。我已将它们定义为浮点类型。

但我想了解,这个结果的原因是什么?

谢谢。

5 个答案:

答案 0 :(得分:8)

与其他语言一样,Javascript可能会将以0开头的数字视为八进制。这意味着只有0到7的数字才有效。

似乎正在发生的事情是0809被视为八进制,但是因为它们具有无效字符,所以这些字符被默默地忽略。所以你实际计算的是0 + 1

或者,可能会忽略整个08并替换0

最好的方法是尝试028 + 1,看看如果解释真的,你会得到31(或者甚至可能30他们很奇怪。

答案 1 :(得分:3)

由于您未指定基数,因此将其视为八进制数。 0809不是有效的八进制数。

parseInt(08,10) + 1;

会给你正确的结果。

参见 parseInt

答案 2 :(得分:1)

这是因为如果你的09 + 1 09形成为八进制(因为前缀为0)。八进制值转到0到7,您的代码似乎证明某些JavaScript引擎将8和9转换为无效字符并忽略它们。

如果您不想使用八进制数(如使用正常的十进制数字),Yu不应该用0作为前缀。

请参阅此页面了解reference和维基百科,了解octal

的内容

答案 3 :(得分:0)

正如您从上面的答案中看到的那样,您遇到了类型冲突。但是,我想我也会建议你解决问题的正确方法......

据我们所知,在这个例子中,08和09被视为ocal:

08 + 1 = 1
09 + 1 = 1

所以你需要指明它们实际是什么:

parseInt("08", 10) + 1 = 1
parseInt("09", 10) + 1 = 1

如果您希望它们是整数,请不要将它们定义为浮点数。

答案 4 :(得分:0)

我只是测试数字,比如

a = 08; b = 1; c = a + b;

它给了我9个