【Ruby】to_iメソッドの使い方を理解しよう

Ruby

to_iメソッドとは、数字の文字列を数値オブジェクトに変換するメソッドです。また、小数を整数に変換することもできます。

to_iメソッドの構文
1
オブジェクト.to_i

例えば、以下のようにnumという変数に文字として数字の1を代入し出力すると、"1"が出力されました。

irb | to_iメソッドの使用例
1
2
3
4
5
6
num = "1"
p num
=> "1"

num.to_i
=> 1

このnumに対し、to_iメソッドを使った結果は1のように数字としての1として出力することが出来ます。

to_iメソッドを使う場所とは?

この章では、to_iメソッドをどんな場面で使用するのか、数字以外の文字にメソッドを使った場合などを解説します。

どんな時に使うか
リンクをコピーしました

例えば下記のようなコードがあるとします。

100と100を足すコード
1
puts 100 + "100"

数字としての100と文字としての100を足してみます。
このコードを実行すると下記のようになります。

エラーが発生

このようにエラーが発生します。
なぜなら数値オブジェクトと文字列オブジェクトは+演算子で計算することができないからです。
これをちゃんと計算式できるようにしたいのであればnumを数値オブジェクトに変換する必要があります。

irb | to_iメソッドの実行
1
2
3
puts 100 + "100".to_i
# 100+100で200が表示される
200

上のように文字である100に対してto_iメソッドを使い数値に変換します。
そうすることにより計算ができたわけです。

100+100

ただ上のような例で使うときはあまりありません。
なぜなら最初から数値オブジェクトとして定義すれば良いからです。
一番よく使う例としてはgetsメソッドを使うときです。
getsメソッドを使って変数に値を代入するとき、必ず文字列オブジェクトとして代入されます。

gets.chompを使用した時
1
2
input = gets.chomp
puts 100 + input

上の例だとgetsメソッドで「100」を入力すると文字としての「100」でinputという変数に代入されます。
この場合だと先ほどの例の通りエラーが出ます。

エラーが発生

なのでgetsメソッドの返り値に対してto_iメソッドを使います。

to_iメソッドを使用した時
1
2
input = gets.to_i
puts 100 + input

なのでgetsメソッドで数字を取得するときは忘れずにto_iメソッドを使いましょう。

gets.to_i

小数に使う場合
リンクをコピーしました

小数(Floatクラス)に使うと整数(Integerクラス)に変換することができます。

irb | クラスの確認
1
2
3
4
5
6
7
8
9
# 小数として定義
num = 1.0
num.class
=> Float

#整数に変換
num = num.to_i
num.class
=> Integer

num_to_i

数字以外の文字にto_iメソッドを使ったとき
リンクをコピーしました

to_iメソッドは数字の文字列オブジェクトに対して使うメソッドです。
では「あ」などの普通の文字に対して使うとどうなるでしょう?

この場合エラーが発生するのではなく、全て数字の「0」として変換されます。

irb | 0として変換される
1
2
3
num = "あ"
num.to_i
=> 0

よくあるのはgetsメソッドで数字として入力したつもりが、かな入力で入力してしまったため全角の「5」などの数字が入ってしまい「0」として変換されてしまうことがあるので注意しましょう。

その他の変換系メソッド
リンクをコピーしました

Rubyには他にもオブジェクトの種類を変換するメソッドが用意されています。

メソッド 変換する内容 参照
to_s 文字列型に変換 参照記事
to_f Floatクラス(浮動小数点数)に「変換 参照記事
to_sym シンボルに変換 参照記事
to_h ハッシュオブジェクトに変換 参照記事
to_a 配列オブジェクトに変換 参照記事
まとめ
  • to_iメソッドは数値オブジェクトに変換するメソッドです。
  • 小数も整数に変換することができます。
  • 文字列を計算式で使いたいときに便利なメソッドです。