つかぱい.com

どうせなら好きなことを書いていたい

Rubyで小数点以下の計算をする時に気をつける事

忘れがちなのでメモ

問題だったところ

ふと全国の小学生の中からタレントって何人くらいいるだろうなって思ってRubyで計算してみたところ0が結果として出力されたのでちょっと期待と違うなーって思った。

~  irb                                                     17.8m  Wed Mar  4 21:49:20 2020
irb(main):001:0> 405/644900
=> 0

解決策

なんでかなと思ったがRubyには便利なClassオフジェクトがあるので一度確認をしてみる

irb(main):003:0> (405/644900).class
=> Integer

想定していたみたいに、小数点以下の割り算をする場合はデータ型をFloatにしてあげないといけないのんでこのように変更

irb(main):005:0> 405/644900.to_f
=> 0.0006280043417584122

こうする事で浮動小終点の計算ができる

おまけ

でも調べたいのはおよそ何パーセントいるんだよって事なので、こんなに細かい数字はいらない。。。

なので余計な部分はfloor関数を使って下の部分をカットすることにした。

irb(main):008:0> (405/644900.to_f).floor(5)
=> 0.00062

このくらいになると割と現実的に使えそうな数字になってきたんのでいいのではないだろうか

ちなみに全国の0〜13歳でタレントになっている確率はおおよそ0.06%なのでSSRを100ガチャで当てるよりもレアだぞ!

irb(main):009:0> (405/644900.to_f * 100).floor(2)
=> 0.06