苦しんで覚えるC言語

型の変換


整数と実数の混合計算


前章までは、整数なら整数同士、実数は実数同士で計算を行ってきました。
整数と実数とで混合計算を行ったことはありませんでした。

整数と実数との混合計算とは、例えば、1.03×9 のような計算のことです。
この計算では、実数×整数の計算が行われています。
この様な場合、その答えはどのようになるのでしょうか。

結論から言ってしまうと、この場合、結果は実数になります。
C言語では、整数と実数で計算した場合の結果は実数に変換されます。
これは、結果を整数にしてしまうと、実数部分がなくなってしまうためです。

次のプログラムは、実際に 1.03×9 を計算してみる例です。

#include <stdio.h>

int main(void)
{
	printf("%f\n",1.03 * 9);
	return 0;
}
このプログラムの実行結果は、次の通りになります。

9.270000
確かに、答えは実数に変換されていることがわかると思います。
また、試しに%d指定子で整数として表示させてみた所、次のようになりました。

-10486
明らかに、おかしな値になっていることがわかります。
なお、こちらの表示はコンパイラによって変わるので、同じにはなりません。

目次に戻る

強制的に変換


整数と実数の計算では、答えは実数になることがわかりました。
しかし、場合によっては、整数の答えの方が都合が良い場合も考えられます。

例えば、消費税の計算は、金額×1.05 (2004/09/14現在)という数式ですが、
この計算を普通に行うと、答えは実数になってしまいます。
金額に小数が含まれるのは不自然です。

もし、実数を、整数に変換する方法があれば、この問題は解決します。
C言語には、型を強制的に変換する機能として、キャスト変換があります。
キャスト変換
強制的に型を変換する機能
キャスト変換の使い方は、次の通りになります。

(変換する型名)数値や変数名
例えば、実数値である 1.05 を整数に変換したい場合 (int)1.05 とすることで、
1.05 が整数に変換され、1 として扱われます。

この方法を使用すれば、消費税の計算も可能になります。
次のプログラムは、360円の商品の消費税を求める例です。

#include <stdio.h>

int main(void)
{
	printf("%d\n",(int)(1.05 * 360));
	return 0;
}
このプログラムの実行結果は、次の通りになります。

378
このプログラムで、1.05×360 に () をつけて計算しているのは、
かっこをつけないと、1.05 が先に変換され 1 になってしまい、無意味になるからです。
この様に、コンピュータ特有の誤差を減らすには、計算の順番は重要です。

なお、実数の計算結果やそれを整数に変換した値は、コンパイラやコンピュータの種類により、
多少違ってくることがあるので、ピッタリ378にはならないこともあります。

キャスト変換は、当然、変数に使用することも可能ですし、使い方も同じです。

目次に戻る