整数値の割算

 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);