[Ruby] Ruby における少数の計算と丸め誤差
Rational クラスを利用します。
% ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]
数値の計算
丸め誤差が発生。
数値に r
を付けると Rational クラスの数値として扱われます。
pry(main)> 0.1 * 3.0
=> 0.30000000000000004
pry(main)> 0.1r * 3.0r
=> (3/10)
値の比較が正しく行えるようになります。
pry(main)> 0.1 * 3.0 == 0.3
=> false
pry(main)> 0.1r * 3.0r == 0.3
=> true
有理数(整数および分数)を to_f
メソッドで Float に変換します。
pry(main)> (0.1r * 3.0r).to_f
=> 0.3
変数の計算
rationalize
メソッドを利用して Rational クラスの数値とします。
pry(main)> a = 0.1
=> 0.1
pry(main)> b = 3.0
=> 3.0
pry(main)> a.rationalize * b.rationalize
=> (3/10)
pry(main)> (a.rationalize * b.rationalize).to_f
=> 0.3
宣言時に r
を付けてみます。
pry(main)> a = 0.1r
=> (1/10)
pry(main)> b = 3.0r
=> (3/1)
pry(main)> (a * b).to_f
=> 0.3
プロを目指す人のためのRuby入門を購入して再入門。