【初心者向け】Rubyプログラミングで変数を数値に変換する方法

プログラム

プログラミングの中で、変数自体は文字列なんだけど中身は数値になっている、みたいなことがよくあります。
例えば、”12345″みたいな形式ですね。
内容は12345の数値ですが、”(ダブルクォーテーション)で囲まれているので、データ型としては文字列となります。

でも、こうした変数をデータベースに保存する時や、他の数値の変数と一緒に処理するときにはエラーが出て困ってしまいます。
そこで、今回は変数を数値に変換する方法を紹介していきます!
変換方法はもちろん、変数の種類や変換できる種類、できない種類も解説していきますので、ご参考にして下さい!

to_i関数

最初に、to_i関数を紹介していきます。
書き方はこのようになります。

変数.to_i

記述も短くて、変数の後に書く形で、シンプルで扱いやすいですね。
コードを書く前に、数値のデータ型について抑えておきましょう。
Rubyでは、Numeric、Integer、Floatという数値のデータ型を持っています。
Integer型は整数、Floatは浮動小数点数、Numericはこの両方を含むデータ型を表します。

今回のto_i関数は、名前の通りInteger型つまり整数のデータ型に変換する関数です。
Rubyの数値のデータ型については、以下の記事でも紹介していますので、参考にしてみて下さいね。


それでは、コードを書いていきましょう!

to_i_1.rb
val1 = "123"
puts val1.to_i
puts val1.to_i.is_a?(Integer)

val2 = "123.45"
puts val2.to_i
puts val2.to_i.is_a?(Integer)

val3 = "abc"
puts val3.to_i
puts val3.to_i.is_a?(Integer)

is_a?という関数が出てきますが、これは引数のデータ型と一致するかどうかを判定してくれます。
上記の記事にも紹介していますので、参考にしてみて下さいね。
では、実行してみます。

$ruby to_i.rb
123
true
123
true
0
true

実行結果を見ると、整数を表した文字列はそのままInteger型にちゃんと変換されています。
また、浮動小数点数を表した文字列は、整数値に直されています。

意外なのは、“abc”の文字列は0に直されている点です。
これは、文字列が数値をきちんと表していないときに活用できそうですね。
文字列が数値に変換されずに0になることが分かっていれば、0を条件に判定できます。
また、数値じゃない文字列であってもエラーにならないのは扱いやすいですね。

では、文字列のデータ型ではない変数をto_i関数に適用するとどうなるのでしょうか?
boolean型をサンプルにして、試してみましょう。

to_i_2.rb
val = true
puts val.to_i

実行してみましょう!

$ruby to_i_2.rb 
Traceback (most recent call last):
to_i_2.rb:2:in `main': undefined method `to_i' for true:TrueClass (NoMethodError)
Did you mean?  to_s

エラーが出てしまいました。
エラー文の内容としては、boolean型にはto_sという関数を使う方が適切となっていますね。
to_i関数は文字列にしか適用できない関数なんですね。
ですので、他のデータ型に適用しても同様のエラーが出てしまいます。
このto_i関数について、より詳細に知りたい場合は公式ドキュメントを参考にしてみて下さいね。
instance method String#to_i

to_f関数

次に、to_f関数を紹介していきます。
書き方はこのようになります。

変数.to_f

先程のto_i関数は文字列をInteger型に変換する関数でしたが、to_f関数は文字列をFloat型に変換する関数です。
使い方も一緒ですので、シンプルで使いやすいですね。
では、早速コードを書いていきましょう!

to_f_1.rb
val1 = "123"
puts val1.to_f
puts val1.to_f.is_a?(Float)

val2 = "123.45"
puts val2.to_f
puts val2.to_f.is_a?(Float)

val3 = "abc"
puts val3.to_f
puts val3.to_f.is_a?(Float)

実行してみましょう。

$ruby to_f.rb 
123.0
true
123.45
true
0.0
true

浮動小数点数が文字列でちゃんと表されていればそのままFloat型の数値に変換されています。
他に、整数が表されている文字列は末尾に”.0″をつけてFloat型に、普通の文字列は0.0に変換されています。
変換結果も、to_i関数と同様になっていますね。

因みに、文字列以外のデータ型に適用するとどうなるでしょうか?
先程と同様にboolean型で試してみましょう。

to_f_2.rb
val = true
puts val.to_f

実行してみましょう。

$ruby to_f_2.rb 
Traceback (most recent call last):
to_f_2.rb:2:in `main': undefined method `to_f' for true:TrueClass (NoMethodError)
Did you mean?  to_s

to_i関数の場合と同様にエラーが出ましたね。
エラー文の内容も同様に、to_sという関数を使う方が適切となっています。
ですので、to_f関数も文字列にしか適用できない関数になります。
他のデータ型に適用してもエラーが出てしまいます。
このto_f関数について、より詳細に知りたい場合は公式ドキュメントを参考にしてみて下さいね。
instance method String#to_f

まとめ

今回は、文字列を数値に変換させる方法を2つ紹介しました。

  • to_i関数:文字列をInteger型(整数)に変換
  • to_f関数:文字列をFloat型(浮動小数点数)に変換

また、その文字列がちゃんと数値で表現されていない場合には0(もしくは0.0)に変換します。
加えて、文字列以外のデータ型に適用した場合にはエラーが出ます。

文字列以外のデータ型にはエラーが出てしまいますが、文字列のデータ型には必ず数値のデータ型を返してくれるので、活用しやすい関数だと思います。
シンプルで適用範囲が広い関数だと思うので、たくさん活用してみて下さいね!