Что такое незаконная восьмеричная цифра? - PullRequest
9 голосов
/ 05 марта 2011

Я пытаюсь создать массив почтовых индексов.

array = [07001, 07920]

Возвращает:

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

Никогда такого не видел.Есть обходные пути?

Ответы [ 3 ]

18 голосов
/ 05 марта 2011

Ruby интерпретирует числа с начальным 0 как восьмеричные (основание 8).Таким образом, цифры 8 и 9 недопустимы.

Вероятно, имеет смысл хранить ZIP-коды в виде строк, а не чисел (чтобы избежать заполнения нулями всякий раз, когда вы их отображаете), например: array = ["07001", "07920"]

4 голосов
/ 05 марта 2011

Числа, начинающиеся с 0, предполагаются в восьмеричном формате, точно так же, как числа, начинающиеся с 0x, предполагаются в шестнадцатеричном формате. Восьмеричные цифры идут только от 0 до 7, поэтому 9 просто не разрешено в восьмеричном числе.

Самый простой обходной путь - это просто записать числа в десятичном формате: 07001 в восьмеричном - это то же самое, что 3585 в десятичном (я думаю). Или вы хотели написать числа в десятичном виде? Тогда самый простой обходной путь - исключить начальные нули: 07001 в любом случае совпадает с 7001.

Однако вы упоминаете, что вам нужен массив почтовых индексов. В этом случае правильным решением будет использование массива ZIP-кодов вместо массива целых чисел, поскольку ZIP-коды не являются целыми числами, они представляют собой ZIP-коды.

3 голосов
/ 05 марта 2011

Ваш массив состоит из чисел, поэтому ведущий ноль заставляет его интерпретироваться как восьмеричное (действительные цифры 0-7). Если это почтовые индексы, а начальный ноль является значимым, вероятно, это должны быть строки.

...