Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
数値.to_i / to_f / to_r / to_s
数値の型を変換するメソッドです。整数への変換『to_i』、浮動小数点数への変換『to_f』、文字列への変換『to_s』を中心に、進数変換や有理数への変換も解説します。
構文
# 整数に変換します。 数値.to_i 文字列.to_i 文字列.to_i(基数) # 2〜36進数として解釈して整数に変換 # 浮動小数点数に変換します。 数値.to_f 文字列.to_f # 文字列に変換します。 数値.to_s 整数.to_s(基数) # 指定した進数の文字列で返す(2〜36) # 有理数・複素数に変換します。 数値.to_r 数値.to_c
メソッド一覧
| メソッド | 概要 |
|---|---|
| to_i | 整数に変換します。文字列の場合は先頭の数値部分だけを変換し、数値でない場合は『0』を返します。 |
| to_i(base) | 文字列を指定した進数として解釈して整数に変換します(2〜36進数)。 |
| to_f | 浮動小数点数に変換します。整数には「.0」が付きます。 |
| to_s | 数値を文字列に変換します。 |
| to_s(base) | 整数を指定した進数(2〜36)の文字列で返します。2進数や16進数への変換に使います。 |
| to_r | 有理数(Rational)に変換します。『3/1』『1/3』のような分数で表現されます。 |
| to_c | 複素数(Complex)に変換します。 |
| Integer(str) | Kernel メソッド。変換できない場合は ArgumentError を発生させます。 |
| Float(str) | Kernel メソッド。変換できない場合は ArgumentError を発生させます。 |
サンプルコード
# to_i:整数に変換
puts "42".to_i # 42
puts "3.14".to_i # 3(小数点以下は切り捨て)
puts "100abc".to_i # 100(先頭の数値部分だけ変換)
puts "abc".to_i # 0(数値がない場合は0)
puts 3.99.to_i # 3(小数点以下を切り捨て)
# to_f:浮動小数点数に変換
puts "3.14".to_f # 3.14
puts 42.to_f # 42.0
puts "1e3".to_f # 1000.0(指数表記も変換)
# to_s:文字列に変換
puts 255.to_s # "255"(10進数)
puts 255.to_s(2) # "11111111"(2進数)
puts 255.to_s(8) # "377"(8進数)
puts 255.to_s(16) # "ff"(16進数)
# 進数変換の逆操作:2進数文字列を整数に
puts "11111111".to_i(2) # 255
puts "ff".to_i(16) # 255
# 安全な変換(変換失敗時にエラー)
begin
Integer("abc")
rescue ArgumentError => e
puts e.message # invalid value for Integer(): "abc"
end
# to_r:有理数に変換
puts 0.1.to_r # 3602879701896397/36028797018963968(内部表現)
puts "1/3".to_r # 1/3
puts 3.14.rationalize(0.001) # 22/7(近似値)
概要
文字列から数値への変換は『to_i』『to_f』を使うのが一般的ですが、これらは変換できない場合でもエラーを発生させず『0』や『0.0』を返します。ユーザー入力など不正な値が入る可能性がある場合は、代わりに『Integer()』や『Float()』を使うとエラーを早期に検出できます。
『to_s(n)』による進数変換はRubyの特徴的な機能です。2進数(base 2)、8進数(base 8)、16進数(base 16)に変換でき、逆変換は『to_i(n)』で行えます。16進数の色コード変換などに便利です。
浮動小数点数は内部で2進数で表現されるため、『0.1.to_r』が奇妙な分数になります。正確な小数計算が必要な場合は最初から『Rational』リテラル(例:『Rational(1, 3)』)や『BigDecimal』を使いましょう。丸め処理と組み合わせると数値計算がより正確に行えます。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。