【发布时间】:2011-06-24 17:11:14
【问题描述】:
我注意到 Ruby 在使用 032 和 32 时的行为有所不同。我曾经因为在我的代码中使用 032 而不是只有 32 而遇到语法错误。谁可以给我解释一下这个?还是我的代码本身真的有问题?
【问题讨论】:
-
我们可以解释为什么
032与32不同,但我们无法解释为什么它是您的代码中的错误,除非您提供问题示例。
我注意到 Ruby 在使用 032 和 32 时的行为有所不同。我曾经因为在我的代码中使用 032 而不是只有 32 而遇到语法错误。谁可以给我解释一下这个?还是我的代码本身真的有问题?
【问题讨论】:
032 与 32 不同,但我们无法解释为什么它是您的代码中的错误,除非您提供问题示例。
您看到的是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"
【讨论】:
当您的号码前面有一个零时,Ruby 会将其解释为 octal(base 8 number)。
你的语法错误大概是这样的:
ruby-1.9.2-p136 :020 > 08
SyntaxError: (irb):20: Invalid octal digit
【讨论】:
0 开头的符号中,只要有8 或9,它们不应该出现在八进制表示中,就会出现错误。
如果您以 0(零)开头的数字,ruby 将其视为八进制,因此您通常不需要零。您必须更具体地了解语法错误。
【讨论】:
我不知道语法错误,但是当你在一个数字前加上零时,这意味着它是八进制(base-8)......所以 032 实际上是十进制的 26
【讨论】: