C/C++で、リテラル値での計算を行い、結果が小数点数となる計算を行う際の書き方についてです。
リテラル値とは?
端的にいうと、コード上に直で書いた値のことです。
下の例でいう「5」のことです。
int a = 5;
失敗例
「1 / 2」をして、結果「0.5」を変数に格納したい。としましょう。
そのまま「1 / 2」を試すと、結果「0」となってしまいます。
double ret = 0.0; ret = 1 / 2; // NG: ret = 0
改善例
どうすれば期待していた「0.5」にできたのでしょうか。
例のうち、どちらかに変更しましょう!
double ret = 0.0; ret = 1.0 / 2.0; // OK: ret = 0.5 ret = (double)1 / (double)2; // OK: ret = 0.5
そんな難しい話ではないですね。
「1.0 / 2.0」のように、小数点「.0」までつけるのが手っ取り早いですよ。
なんでこうなるの?
リテラル値は、「1」のように書くと整数値として扱われます。
しかし「1.0」のように書くと、見ての通り小数点数として扱われます。
失敗例……「1」のように書いた場合、「int / int」となり
成功例……「1.0」のように書いた場合は「double / double」となります。
あとがき
一見単純なことですが、0.5となるはずが、0となってしまっては処理が大きく変わってしまいます。
昔これのせいで、どうもうまくいかず、デバッグ中にゾッとしました……
気を付けていきましょうー。