Rubyで文字列と数値を変換する方法!to_i/to_fとInteger/Floatの使い方
生徒
「Rubyで文字列を数字に変換したいときはどうすればいいですか?」
先生
「Rubyでは、文字列を整数に変換するto_iやInteger()、小数に変換するto_fやFloat()を使います。」
生徒
「違いはありますか?」
先生
「はい。to_iやto_fは文字列の先頭から数字部分だけを変換し、無効な文字は無視します。Integer()やFloat()は正しい数値でないと例外(エラー)になります。」
1. to_iとto_fで文字列を変換する
to_iは文字列を整数に変換します。文字列の先頭から数字を読み取り、それ以降は無視します。数値がない場合は0を返します。同様にto_fは小数を返します。
puts "123".to_i # 123
puts "123abc".to_i # 123
puts "abc123".to_i # 0
puts "3.14".to_f # 3.14
puts "3.14abc".to_f # 3.14
puts "abc3.14".to_f # 0.0
123
123
0
3.14
3.14
0.0
この特徴を理解しておくと、文字列の先頭に数字がある場合は安全に変換できます。
2. Integer()とFloat()で厳密に変換する
Integer()やFloat()は、文字列が正しい形式の数値でない場合にArgumentErrorという例外を発生させます。
puts Integer("123") # 123
puts Float("3.14") # 3.14
# 例外発生
# Integer("123abc") => ArgumentError
# Float("abc3.14") => ArgumentError
例外はプログラムが止まる原因になるため、文字列が正しい数値か不安な場合はrescueで例外処理を行うことが重要です。
begin
puts Integer("123abc")
rescue ArgumentError
puts "数値に変換できません"
end
数値に変換できません
3. 使い分けのポイント
簡単にまとめると次のようになります。
to_i/to_f:文字列の先頭から数字だけを変換。安全だが厳密ではない。Integer()/Float():文字列全体が正しい数値でないと例外。厳密に変換したいときに使用。- 不正な文字列が入力される可能性がある場合は
rescueで例外処理。
初心者の方は、まずto_i/to_fを使って安全に数字を取得し、必要に応じてInteger()/Float()で厳密に処理する練習をおすすめします。
4. 実用例:ユーザー入力の数値変換
ユーザーから文字列で入力された数値を安全に変換する例です。
print "年齢を入力してください: "
age_input = gets.chomp
# to_iで安全に整数に変換
age = age_input.to_i
puts "あなたの年齢は#{age}歳です"
# Integerで厳密にチェック
begin
exact_age = Integer(age_input)
puts "正確な年齢: #{exact_age}"
rescue ArgumentError
puts "正しい数字を入力してください"
end
年齢を入力してください: 25歳
あなたの年齢は25歳です
正しい数字を入力してください
このように、変換方法を使い分けることで、入力ミスや不正な文字列に対応できます。
5. 注意点
- 文字列の先頭に数字がなければ
to_i/to_fは0を返す Integer()/Float()は正しい数値でないと例外になる- 例外処理は
rescueで必ず補う - ユーザー入力や外部データを数値に変換する場合は、どちらの方法を使うか明確に決める
これらを理解すれば、Rubyで文字列と数値の変換が安全にできるようになります。
まとめ
Rubyで文字列から数値へ変換する方法は、初心者が最初につまずきやすい部分ですが、仕組みを一度理解すると様々な場面で応用できる大切な基礎となります。とくに日常的にデータを扱うプログラムでは、ユーザーが入力する値や外部から取得した情報が文字列で渡されるケースが多く、その文字列が安全に数値へ変換できるかどうかはプログラムの信頼性に大きく関わります。今回の記事で扱ったto_i、to_f、Integer()、Float()はまさにその中心となる機能で、それぞれの変換方法の特徴や挙動を理解することが、正確で扱いやすいコードを書くための第一歩になります。
特にto_iとto_fは、文字列の先頭に数字があれば柔軟に変換できる反面、意図しない0や0.0が返ることもあるため、データの正確さを求める処理には適していない場合があります。一方で、Integer()やFloat()は「数値として正しい文字列であること」を前提にしており、入力内容が厳密にチェックされます。この厳密さはプログラムの安全性を高める一方で、エラー処理を適切に書かないとプログラムが停止してしまうため、使いどころを見極めることが大切です。このように、変換方法ごとの性質を理解して使い分けることが、効率的で安定したプログラム構築につながります。
また、Rubyは文字列変換を柔軟に行えるため、フォーム入力やファイルデータの加工、APIレスポンスの解析など、日常的なプログラミング処理すべてに役立ちます。今回の学習ポイントを押さえておくことで、誤入力があっても安全に処理できるコードを書けるようになり、実践的なスキルを高める土台になります。ここでは、より実用的な視点で数値変換のコツを整理しつつ、再確認のためのサンプルコードもまとめています。
数値変換の復習コード
文字列の扱いを整理しやすいように、to_iとInteger()を組み合わせたサンプルコードを用意しました。入力内容が安全に数値へ変換される流れを確認できます。
input = "45歳"
# to_iで柔軟に変換
age = input.to_i
puts "変換結果(to_i): #{age}"
# Integerで厳密に変換
begin
strict_age = Integer(input)
puts "変換結果(Integer): #{strict_age}"
rescue ArgumentError
puts "厳密な変換には失敗しました"
end
この例のように、「数値として扱いたいが多少の文字混在なら許容する」という場合はto_iが便利です。一方で、フォーム入力などで「必ず正確な数値が必要」というケースではInteger()で厳密に判定し、入力チェック機能の一部として利用する方法が有効です。
実践的な使い分けのヒント
実務や学習でよくある「ユーザー入力の変換」「外部データの検証」などの場面では、それぞれの変換を正しく使い分けることがコードの品質を左右します。たとえば、CSVファイルやAPIレスポンスのように外部から渡されるデータは意図しない文字列が混ざることもあり、to_i/to_fで柔軟に処理しておくとプログラムが止まりにくくなります。一方で、金額や数量など必ず正しい数値でないと困る情報については、Integer()で厳密に判定し、エラーを通知する方が安全です。この判断力が身につくと、場面に応じた適切な変換方法を選択でき、自然と堅牢なコードへ近づいていきます。
先生と生徒の振り返り会話
生徒
「今日の内容で、文字列から数値へ変換する仕組みがようやく理解できました!特にto_iとInteger()の違いがこんなにはっきりしているとは思いませんでした。」
先生
「その気づきはとても大事ですね。同じ“変換”でも、安全に変換するのか、厳密に変換するのかで挙動が大きく変わります。Rubyでは目的に応じて選べるので、柔軟な構造になっています。」
生徒
「ユーザー入力に使うときは、まずto_iで0にならないかチェックして、必要ならInteger()で厳密に確認する…って感じで使い分けると良さそうですね。」
先生
「その通りです。日常的な処理ではto_iで十分ですが、重要なデータを扱う場面では例外処理も含めてIntegerを使うと安全ですよ。今回覚えた変換ロジックは、どんなアプリでも役に立ちます。」
生徒
「実際に手を動かして変換してみると、例外が出る理由もよくわかりました。次は文字列だけでなく、配列やハッシュと組み合わせて変換の練習もしてみたいです!」
先生
「いいですね。少しずつ応用していけば、文字列処理全体の理解がどんどん深まりますよ。がんばって続けていきましょう。」