0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

計算結果で丸め誤差が発生した時に丸める方法

Last updated at Posted at 2021-06-27

参考図書

題名:プロを目指す人のための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

ご意見ありがとうございました。

0
0
3

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?