値の型変換

getsでデータを読み込む場合、 たとえ数字が入力されてもそれは必ず「文字列」として読み込まれる。 数値として計算に利用したい場合は文字列を数値に変換する必要がある。 逆に、数値を文字列に戻すことが必要になることもある。各々の 変換をしてくれるメソッドを紹介する。

文字列から数値へ

小数を表現できる数値のことを浮動小数点数(Floating Point Number)という。一般に計算機では、整数と浮動小数点数は別の形式で 内部処理される。このため、整数を割り算した結果は小数点以下が切り捨てられ、 やはり整数になる。

上記の to_i, to_f いずれも、変換前の値は、 文字列でなくとも構わない。たとえば、

pi=3.1415
q=pi.to_i

も正しい使い方で、qの値は3となる。

Rubyを含めた多くの言語では小数点を含まない数は整数 として処理される。それを意識しないと割り算をするときに結果が異なるので 注意が必要である。

x=5			# xには「整数」の5が入る
y=x/2			# 2で割っても「整数」なので2.5 → 2 となる
printf("%f\n", y)	
2.000000		# %f を使ってもyが2なので2.0となる

割り算をする前には、割る方か割られる方のどちらかをto_f で浮動小数点数に変換しておかなければならない。以下のいずれでも、 yは正しく2.5となる。

# その(1)
x=5.0			# 小数点を付けると最初から浮動小数点数
y=x/2			# 5.0が浮動小数点数なので割り算も浮動小数点数
# その(2)
x=5			# この時点ではまだ整数
y=x/2.0			# 2.0が浮動小数点数なので割り算も浮動小数点数
# その(3)
x=5			# この時点ではまだ整数
y=x/2.to_f		# 整数の2を浮動小数点数に変換
# その(4)
x=5			# この時点ではまだ整数
y=x.to_f/2		# xを浮動小数点数に変換してから2で割る

数値から文字列へ

プログラムの中で数値を処理する場合でも、その結果を出力するためには また文字列に戻す必要がある。そのため

のいずれかの方法を知っておく必要がある。これまで利用していた printf は後者に相当する。まずprintf について説明し、続いて数値を文字列化する to_s, sprintf メソッドについて説明する。

printfで数値を出力するのではなく、文字列に変換して 別の変数に入れるようなときは以下のメソッドを利用する。


本日の目次