什么是非法八进制数字?

时间:2011-03-05 19:48:23

标签: ruby-on-rails ruby octal

我正在尝试制作一系列邮政编码。

array = [07001, 07920]

返回:

array = [07001, 07920]
                  ^
    from (irb):12
    from :0

之前从未见过这个。任何解决方法?

3 个答案:

答案 0 :(得分:18)

Ruby正在将具有前导0的数字解释为八进制(基数为8)。因此,数字8和9无效。

将邮政编码存储为字符串而不是数字可能更有意义(以避免在显示时使用零填充),如下所示:array = ["07001", "07920"]

答案 1 :(得分:4)

假设以0开头的数字采用八进制格式,就像以0x开头的数字一样,假设为十六进制格式。八进制数字仅从0变为7,因此9在八进制数字中根本不合法。

最简单的解决方法是简单地以十进制格式编写数字:八进制中的07001与十进制中的3585相同(我认为)。或者你的意思是用十进制数字写?然后,最简单的解决方法是不使用前导零:07001无论如何都与7001相同。

但是,您提到需要一组邮政编码。在这种情况下,正确的解决方案是使用一个ZIP代码数组而不是整数数组,因为邮政编码不是整数,而是邮政编码。

答案 2 :(得分:3)

您的数组是数字,因此前导零使其被解释为八进制(有效数字0-7)。如果这些是邮政编码,并且前导零很重要,那么它们应该是字符串。