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

时间:2011-04-11 04:01:09

标签: ruby octal

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

4 个答案:

答案 0 :(得分:9)

您所看到的是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"

答案 1 :(得分:5)

如果您的号码前面有零,则Ruby会将其解释为octal(base 8 number)

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

ruby-1.9.2-p136 :020 > 08
SyntaxError: (irb):20: Invalid octal digit

答案 2 :(得分:4)

如果你用0(零)开始一个数字,ruby将它视为八进制,所以你通常不想要零。您必须更具体地了解语法错误。

答案 3 :(得分:4)

我不知道语法错误,但是当你给数字前缀加零时,意味着它是八进制(base-8)...所以032实际上是十六进制的