なぜ小数点の計算結果は誤差が生じるのか
x = 122 * 1.1
puts x
#出力結果は134.2000000000002となる
実際に計算をしてみると計算結果は「134.2」となります。
なぜ、このような間違いが起きるのでしょうか?
コンピューターが2進数であることに起因しているようです。
引用
数値として2進浮動小数点数が用いられる場合
定数を10進表記で表していても内部では2進数で処理される
有限の2進数で小数を表した場合の計算は、常に誤差を伴いうる
と言うことを覚えていただいた方が良いでしょう。
引用元
https://ja.stackoverflow.com/questions/49377/javascript%e3%81%ae%e6%8e%9b%e3%81%91%e7%ae%97%e3%81%ae%e7%b5%90%e6%9e%9c%e3%81%8c%e8%a8%88%e7%ae%97%e6%a9%9f%e3%81%ae%e7%b5%90%e6%9e%9c%e3%81%a8%e7%95%b0%e3%81%aa%e3%82%8b%e3%81%ae%e3%81%af%e3%81%aa%e3%81%9c%e3%81%a7%e3%81%99%e3%81%8b/49380#49380
解決法
x = 122 * 1.1.rationalize
puts x.to_f
#出力結果は134.2となる
.rationalizeを使うことで有理数に変換することができます。
1.1.rationalize
#返り値は11/10となる
小数点の出力結果が欲しいので
.to_fのfloat型(小数型)にもどします。
以上の2点をすることで求めている答えになります。