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

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

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

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

并且,为了完整性,您可能需要处理hex:

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

和二进制:

 >> 0b100000 #=> 32 >> 32.to_s(2) #=> "100000" 

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

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

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

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

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