C言語を使っていると,C言語の初心者でなくても,陥り易い罠がある.その一つが整数値の割算である.
次のプログラムは「 1000 の 50% はいくら?」の答えを出力するためのものである.
main() { printf("%d\n", 50 / 100 * 1000); }
正解は 500 のはずであるが,このプログラムは 0 と出力する.その理由は, 50 / 100 の割算にある.
C言語では,整数同士の割算の結果は,割算の商となる.すなわち,小数点以下は切り捨てられる.したがって, 50 / 100 は 0 となるのである.それに 1000 を掛けても,結果は 0 のままである.
数値演算は左から行われるので,上のような計算の場合には,割算を最後に持って来て,
printf("%d\n", 1000 * 50 / 100);
とすれば,期待する結果を得ることができる.
また,割算をしようとしている二つの数の少なくとも一方が,小数点を含む数ならば,結果も小数点を含む数となり,小数点以下が切り捨てられない.したがって,次のようにしても良い.ただし,結果が浮動小数点数なので,printf の書式文字列には,%d ではなくて %f を用いる必要がある.
printf("%f\n", 50.0 / 100 * 1000);