我在javascript中有从01(int)到09(int)的数字,我想为每一个添加1(int)。
例如:
01 + 1 = 2
02 + 1 = 3
但是
08 + 1 = 1
09 + 1 = 1
我知道解决方案。我已将它们定义为浮点类型。
但我想了解,这个结果的原因是什么?
谢谢。
答案 0 :(得分:8)
与其他语言一样,Javascript可能会将以0
开头的数字视为八进制。这意味着只有0到7的数字才有效。
似乎正在发生的事情是08
和09
被视为八进制,但是因为它们具有无效字符,所以这些字符被默默地忽略。所以你实际计算的是0 + 1
。
或者,可能会忽略整个08
并替换0
。
最好的方法是尝试028 + 1
,看看如果解释真的0>,你会得到3
或1
(或者甚至可能30
他们很奇怪。
答案 1 :(得分:3)
答案 2 :(得分:1)
这是因为如果你的09 + 1
09
形成为八进制(因为前缀为0)。八进制值转到0到7,您的代码似乎证明某些JavaScript引擎将8和9转换为无效字符并忽略它们。
如果您不想使用八进制数(如使用正常的十进制数字),Yu不应该用0作为前缀。
的内容答案 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个