Почему 032 отличается от 32 в Ruby? - PullRequest
1 голос
/ 11 апреля 2011

Я заметил, что Ruby ведет себя по-разному при работе с 032 и 32. Однажды я получил синтаксические ошибки из-за наличия 032 вместо 32 в моем коде.Может кто-то объяснить это мне?Или что-то не так с моим кодом?

Ответы [ 4 ]

9 голосов
/ 11 апреля 2011

То, что вы видите: 032 является восьмеричным представлением, а 32 является десятичным:

>> 032 #=> 26
>> 32 #=> 32
>> "32".to_i(8) #=> 26
>> "32".to_i(10) #=> 32

И, просто для полноты, вам может потребоваться иметь дело с шестнадцатеричным:

>> 0x32 #=> 50
>> "32".to_i(16) #=> 50

и двоичный код:

>> 0b100000 #=> 32
>> 32.to_s(2) #=> "100000"
5 голосов
/ 11 апреля 2011

Если перед вашим номером стоит ноль, Ruby интерпретирует его как восьмеричное число (основание 8) .

Вы синтаксическая ошибка, вероятно, что-то вроде этого:

ruby-1.9.2-p136 :020 > 08
SyntaxError: (irb):20: Invalid octal digit
4 голосов
/ 11 апреля 2011

я не знаю о синтаксических ошибках, но когда вы ставите число перед нулем, это означает, что оно восьмеричное (base-8) ... так что 032 на самом деле 26 в десятичном виде

4 голосов
/ 11 апреля 2011

Если вы начинаете число с 0 (ноль), ruby ​​рассматривает его как восьмеричное, поэтому вы обычно не хотите ноль.Вы должны быть более конкретны в отношении синтаксической ошибки.

...