Ruby: 2進数/8進数/16進数
REx - Ruby Examination で解いた問題の解説を自分なりにまとめ直すシリーズです。
問題
エラーが発生するのはどれですか
選択肢
puts "0x90".hex
puts '90'
puts 0b2
puts '80'.oct
解答
正解は [3] です
解説
数値のプレフィックス
num = 0d1234 // 10進数 (0dで始まる数値は10進数とみなされる) num = 0xffff // 16進数 (0xで始まる数値は16進数とみなされる) num = 0o777 // 8進数 (0oで始まる数値は 8進数とみなされる) num = 0b11000100 // 2進数 (0bで始まる数値は 2進数とみなされる)
文字列を数値変換するメソッド
- Stringクラス
.hex
: 16進数の文字列表現とみなして、10進数の整数に変換する.oct
: 8進数の文字列表現とみなして、 〃- oct は文字列のプレフィックスに応じて 8 進以外の変換も行います。
p "0b10".oct # => 2
p "0x10".oct # => 16
.to_i
: 10進数の文字列表現とみなして、 〃.to_f
: 10進数の文字列表現とみなして、10進数の浮動小数点数 Float に変換する
- Kernelモジュール
Integer()
: 引数を整数に変換した結果を返しますFloat()
: 引数を浮動小数点数 Float に変換した結果を返します
参考,引用: class String (Ruby 2.5.0)
実際の実行結果
irb(main):001:0> puts "0x90".hex 144 => nil irb(main):002:0> puts '90' 90 => nil irb(main):003:0> puts 0b2 SyntaxError: (irb):3: numeric literal without digits puts 0b2 ^ from /your/path/... irb(main):004:0> puts '80'.oct 0 => nil