コスパ重視で生きたい人生だった

なるべく楽して生きて行きたい30代サラリーマンのブログ

Rubyで小数計算がいけてなくて計算結果が変わらなかった事例


すっかりRubyブログみたいな感じになっちゃってます。
新しいことをはじめると、気付きがいろいろあって楽しいですね。

今回は、Rubyで数字の計算をするときに躓いたことを覚書。
特に小数になる計算は要注意と感じました。


●小数になる計算をするときは数値の末尾に「.0」をつけよう

今回陥った事象は以下の通り。

cal = num + (2/(12+1)*(num-num_1))

のような計算をしているときに発生しました。
numとnum_1には整数が(例えば200と190)が入っているのですが、何回計算してもcalがnum(=200)になってしまう。
本当は201とかそういう値を期待しているのに。

で、事象を切り分けていくと気付きました。
2/(12+1)の部分が小数になっており、切り捨てられて0になっていることに。
結局、

cal = num + (2.0/(12.0+1.0)*(num-num_1))

と記述することで問題は解決。
このとき、calには小数第10位とかになり、かなりの桁数になるので、四捨五入したいときは

cal.round

これで四捨五入。
小数点第二位まで出したいときは

cal.round(2)

これで小数点第二位まで。
ついでに数値じゃなくて文字列にしたいときは

cal.round(2).to_s

めっちゃ便利。

そんじゃまた。

作りながら学ぶ Ruby入門

作りながら学ぶ Ruby入門