参考図書
題名:プロを目指す人のためのRUBY入門
著者: 伊藤淳一
現象
puts 0.3*6.0
# => 1.7999999999999998
丸め誤差が発生
### 上記のような時に答えを丸める方法
(1)
puts 0.3r * 6.0r
# => 9/5
分数?となった答えが返ってくるこれに
(2)
puts (0.3r * 6.0r).to_f
# => => 1.8
「.to_f」浮動小数点数を使用し、変換すると丸まった答えが導き出せる。
変数に格納されたものを丸めるとき
a = 0.3
b = 6.0
上記のように変数に少数を代入してその結果を丸めたいときは
rationalizeメソット を使用する
a = 0.3
b = 6.0
puts (a.rationalize * b.rationalize).to_f
#=> 1.8
上記のようにすれば丸められる。
以前、計算する時に小数点がめっちゃ出るやん、、、
てな事が以前ありましたが、こうすれば良いのだと勉強になりました。
別の方法
ちなみに、rationalizeを変数に格納する段階で使用してもいけました。
a = 0.3.rationalize
b = 6.0.rationalize
puts (a * b).to_f
#=> 1.8
または
a = 0.3r
b = 6.0r
puts (a * b).to_f
#=> 1.8
その他
floorメソットを使った方法でもいけました
puts (0.1 * 6.0).floor(2)
# (2)は第2小数点まで表示させますよーという意味です。(3)なら第3小数点まで表示。
こっちでも同じ結果が吐き出された。
floorよりも丸めを行う場合は**round(四捨五入)**が良いとご意見を頂きましたので修正。
puts (0.3 * 6.0).floor(2)
puts (0.3 * 6.0).round(2)
#=>1.79
#=>1.8
ご意見ありがとうございました。