Ruby on Rails アプリでは、整数として格納されている詳細がいくつかありますが、文字列に変換しようとすると 16 進数として解釈されます。
例えば
> 0123.to_s
=> 83
Rubyが16進数と見なす形式であっても、値を整数として扱う方法はありますか? 存在しない場合は、データベース フィールドを varchar に変更します。
Ruby on Rails アプリでは、整数として格納されている詳細がいくつかありますが、文字列に変換しようとすると 16 進数として解釈されます。
例えば
> 0123.to_s
=> 83
Rubyが16進数と見なす形式であっても、値を整数として扱う方法はありますか? 存在しない場合は、データベース フィールドを varchar に変更します。
実は、これは 16 進数ではなく、8 進数です。この動作が望ましくない場合は、コード内の整数リテラルの先頭にゼロを付けないでください。
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"