Rubyで文字列から数値へ変換する方法まとめ

19/01/20 15:02:58     19/05/05 17:14:48

文字列を変換するには?

Rubyだけではありませんが、プログラミングにおいて変数や配列の型は意識すべき項目です。プログラミング初心者のうちはあまりピンとこず、なんで型を意識する必要があるのか、と思われるかもしれません。

型を明示する理由はいくつかありますが、たとえば開発者の意図しない値が入るバグを防ぐことや、メモリ領域の取り方が型によって異なるということが挙げられます。そして、特に重要なのはやはりメモリのことでしょう。

プログラミング言語はなるべくメモリを圧迫せずに無駄のない処理を行うよう設計されていますが、そのためには型の明示が重要なのです。同じ変数や配列でも型によってメモリ領域の取り方が変わるため、無駄に多く取ることを防いでいるのです。

しかし、システム上途中で変数や配列の型を変えたい、設計を見直したところ型を別のものにした方が良かったが、すべて修正するのは時間が掛かるため必要な部分で型を変換したい、といったことがあるかと思います。

そこでこのページでは、Rubyで文字列から数値へ変換する方法を紹介します。今回は文字列から数値に変換する方法を中心に解説しますが、変換する型が違っても基本的な考え方は同じです。

文字列から整数に変換する方法

文字列から数値へ変換すると言っても、数値型は一つではありません。まずは、もっとも多い整数型への変換方法を紹介します。とは言っても使用するメソッドは非常にシンプルです。

具体的には、Stringクラスのオブジェクで「to_i」メソッドを使用します。int型に変換するということでto_iだと思うので、直感的に理解しやすいメソッドです。10進数に変換できるものであればint型に変換し、変換できない場合は0を返します。

以下の例で確認します。

str = "2019"
puts str.to_i
str = "今年は2019年"
puts str.to_i
str = "平成最後の年です"
puts str.to_i

上記のソースコードを実行すると、以下のようにコンソール出力されます。

2019
2019
0

まず最初の「2019」についてはそのまま数字に変換できるため、変換されました。次に、「今年は2019年」は整数型に変換できる「2019」の部分だけ変換されました。残りの部分については、自動的に切り捨てられます。

最後に、「平成最後の年です」は数値に変換できる部分がありません。よって、0が返されました。基本的なto_iメソッドの使い方は以上のようになります。またデフォルトでは上の通り10進数を返しましたが、何進数かを指定することも可能です。

to_iメソッドは引数を持つことが可能で、そこで何進数かを指定します。サンプルコードは以下です。

str = "1010"
puts str.to_i(2)
str = "0xa0"
puts str.to_i(16)
str = "gg"
puts s.to_i(17)

このソースコードを実行すると、以下のようにコンソール出力されます。

10
160
288

それぞれ指定した進数に変換されました。

文字列からfloat型に変換する方法

上で紹介した方法では整数型に変換しており、Integerでした。しかし、整数だけではなく小数も数値に変換することが可能です。使用するメソッドはIntegerのときとほぼ同じで、「to_f」です。fはfloatのfだと思うので、こちらも直感的にわかりやすいコードです。

サンプルコードは以下です。

str = "3.1415"
puts str.to_f
str = "-1.2e-3"
puts str.to_f
str = "99.9%"
puts str.to_f

このソースコードを実行すると、以下のようにコンソール出力されます。

3.1415
-0.0012
99.9

float型に変換されました。このように、文字列は整数でも小数でも変換できます。

数値を文字列に変換する

上では文字列を数値型に変換する方法を解説しましたが、逆に数値を文字列に変換することも可能です。文字列は数値と違って数字でなければならない、整数でなければならない、といった制約がないため、変換するのはより簡単です。

使用するメソッドは「to_s」メソッドで、sはStringのsと思われます。文字列を数値に変換するとき同様、メソッドは直感的に理解しやすいものになっています。また文字列を数値に変換する際にはStringクラスで生成したオブジェクトのメソッドを使用しましたが、数値型から文字列に変換する場合はIntegerクラスで生成したオブジェクトのメソッドを使用します。

サンプルコードは以下です。

num = 12
puts (num, ".to_s = ", num.to_s, "¥n")
puts (num, ".to_s(10) = ", num.to_s(10), "¥n")
puts (num, ".to_s(2) = ", num.to_s(2), "¥n")
puts (num, ".to_s(8) = ", num.to_s(8), "¥n")
puts (num, ".to_s(16) = ", num.to_s(16), "¥n")

上記のコードを実行すると、以下のようにコンソール出力されます。

12.to_s = 12
12.to_s(10) = 12
12.to_s(2) = 1100
12.to_s(8) = 14
12.to_s(16) = c

文字列を数値に変換する際に何進数かを指定可能だと説明しましたが、数値を文字列に変換する際にも何進数かを指定することができます。文字列→数値でも、数値→文字列でも、コードの内容はほぼ同じということです。

いろいろな変換まとめ

最後に、Rubyで文字列から数値、数値から文字列、といろいろと変換している具体例を列挙します。今回紹介していないものも含んでいるので、「そんなのもあるんだ」という形で読み流していただければ良いかと思います。

#!/usr/bin/ruby

#数値を16進数文字列に
p 65.to_s(16) #=> “41”

#数値をASCII文字に
p 65.chr #=> “A”

#文字列を16進数とみなして数値に
p “41”.hex #=> 65
p “0xFF”.hex #=> 255
p “41”.to_i(16) #=> 65
p “0x41”.to_i(16) #=> 65

#文字列を10進数とみなして数値に
p “41”.to_i #=> 41
p “0x41”.to_i #=> 0, 数字ではないところまでを変換する

#ASCII文字を数値に
p “A”.ord #=> 65
p “AB”.ord #=> 65, 最初の1文字だけが対象

#文字列を数値配列に
p “ABCDEFG\x41\x42”.unpack(“C*”)
#=> [65, 66, 67, 68, 69, 70, 71, 65, 66]

#文字列を16進数ダンプ風
p “ABCDEFG\x41\x42”.unpack(“H*”).pop.scan(/[0-9a-f]{2}/).join(” “)
#=> “41 42 43 44 45 46 47 41 42”

#16進数ダンプ風文字列を文字列に
p “41 42 43 44 45 46 47 41 42”.split.collect {|c| c.hex}.pack(“C*”)
#=> “ABCDEFGAB”
p “41 42 43 44 45 46 47 41 42”.split.collect {|c| c.hex.chr}.join
#=> “ABCDEFGAB”

まとめ

以上、Rubyの数値、文字列変換について紹介しました。

基本的なところはある程度押さえておき、最後に紹介した応用的な部分はざっくり把握しておけば良いかと思います。プログラミングにおいてはきっちり押さえておく基本事項とざっくり知っておけば良い応用事項を切り分けることが重要です。

基本はきっちり押さえるのですが、すべてをきっちり把握することは不可能です。なので、幅広くコードを見ておき、必要になったらあらために詳細に深堀していくイメージです。

Rubyのフリーランス案件をチェック

→Rubyの案件情報一覧はこちら

Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, (この記事)Rubyで文字列から数値へ変換する方法まとめ
9, RubyのWebサーバ「puma」を使ってみた感想
10, Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方

 

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する