在Ruby on Rails应用程序中,我们有一些细节存储为整数,但在我们尝试转换为字符串时被解释为十六进制。
e.g。
> 0123.to_s
=> 83
有没有办法将值视为整数,即使它是Ruby看到的十六进制格式。如果没有,我们只需将数据库字段更改为varchar!
答案 0 :(得分:7)
实际上,那不是十六进制,那是八进制。如果您不想要此行为,请不要在代码中的整数文字上放置前导零:
irb(main):001:0> 0123 # octal literal
#=> 83
irb(main):002:0> 0x123 # hex literal
#=> 291
irb(main):003:0> 123 # base-10 literal
#=> 123
irb(main):004:0> "0123".to_i # Converting string to int defaults to base 10
#=> 123
如果前导零出现是因为你使用Ruby来创建使用printf的对齐Ruby代码,如下所示:
irb(main):008:0> "%04i" % 123
#=> "0123"
...然后使用空格填充而不是零:
irb(main):009:0> "%4i" % 123
#=> " 123"