[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入門を購入して再入門。