小数点での計算の際、思わぬバグが生じたりする。
例えば0.1かける3が0.3にならない。
丸め誤差発生
0.1 * 3.0
=> 0.30000000000000004
これはPCが10進数ではなく2進数で計算していることが原因なのですが、
上記コードから、以下のような場合が発生します。
思わぬバグ
0.1 * 3.0 == 0.3 #-> false
0.1 * 3.0 <= 0.3 #-> false
そのため、Rubyで小数点の計算を行うときは、Rationalクラスを使う!
数字の後ろに『r』をつけることで利用できる!
Rationalクラス利用
0.1r * 3.0r #->3/10
# 上記を利用すると・・・
0.1r * 3.0r == 0.3 #-> true
0.1r * 3.0r <= 0.3 #-> true
変数に小数点が入っている場合は、rationalizeメソッドを呼び出すことでRationalクラスの数値に変換することができる!
rationalizeメソッド
a = 0.1
b = 3.0
a.rationalize * b.rationalize #-> 3/10
『分数になってるやないか!』というツッコミが聞こえてくる・・・
その場合はto_fメソッドを使って、分数を少数にしてくださいませ!
to_fメソッド
(0.1r * 3.0r).to_f #-> 0.3
以上、備忘録でした!