为什么032与Ruby中的32不同?

Vol*_*ort 1 ruby octal

我注意到Ruby在使用032和32时的行为有所不同.我曾经在代码中遇到032而不是32的语法错误.谁可以给我解释一下这个?或者我的代码本身有什么问题吗?

the*_*Man 9

你所看到的032是八进制表示,并且32是十进制的:

>> 032 #=> 26
>> 32 #=> 32
>> "32".to_i(8) #=> 26
>> "32".to_i(10) #=> 32
Run Code Online (Sandbox Code Playgroud)

并且,为了完整性,您可能需要处理十六进制:

>> 0x32 #=> 50
>> "32".to_i(16) #=> 50
Run Code Online (Sandbox Code Playgroud)

和二进制:

>> 0b100000 #=> 32
>> 32.to_s(2) #=> "100000"
Run Code Online (Sandbox Code Playgroud)


Mik*_*wis 5

当你的数字前面有零时,Ruby将其解释为八进制(基数为8).

您的语法错误可能是这样的:

ruby-1.9.2-p136 :020 > 08
SyntaxError: (irb):20: Invalid octal digit
Run Code Online (Sandbox Code Playgroud)