LoginSignup
1
1

More than 3 years have passed since last update.

【Ruby】小数の計算での丸め誤差について

Posted at

丸め誤差

Rubyでは以下のように小数の計算で期待しない結果になることがある。(他の言語でもよく発生する)

0.1 * 6.0
#=> 0.6000000000000001

そのため以下のような現象が起こる。

0.1 * 6.0 == 0.6
#=> false

0.1 * 6.0 <= 0.6
#=> false

対処法

Rational(有理数)クラスを使うことで期待した結果が得られる。
以下のように数値の後ろにrを付けるとRationalクラスの数値になる。

0.1r * 6.0r
#=> (3/5)

0.1r * 6.0r == 0.6
#=> true

値が変数に入っている場合はrationalizeメソッドを呼び出して、Rationalクラスの数値に変換できる。

x = 0.1
y = 6.0
x.rationalize * y.rationalize
#=> (3/5)

小数に戻したい場合はto_fメソッドを呼ぶ。

(0.1r * 6.0r).to_f
#=> 0.6

x = 0.1
y = 6.0
(x.rationalize * y.rationalize).to_f
#=> 0.6

参考文献

伊藤 淳一 「プロを目指す人のためのRuby入門」, 技術評論社, 2017

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1