型の変換
整数と実数の混合計算
前章までは、整数なら整数同士、実数は実数同士で計算を行ってきました。
整数と実数とで混合計算を行ったことはありませんでした。
整数と実数との混合計算とは、たとえば、1.03×9 のような計算のことです。
この計算では、実数×整数の計算が行われています。
この様な場合、その答えはどのようになるのでしょうか。
結論から言ってしまうと、この場合、結果は実数になります。
C言語では、整数と実数で計算した場合の結果は実数に変換されます。
これは、結果を整数にしてしまうと、実数部分がなくなってしまうためです。
次のプログラムは、実際に 1.03×9 を計算してみる例です。
このプログラムの実行結果は、次の通りになります。
確かに、答えは実数に変換されていることがわかると思います。
また、試しに%d指定子で整数として表示させてみた所、次のようになりました。
明らかに、おかしな値になっていることがわかります。
なお、こちらの表示はパソコン環境によって変わるので、必ずしも同じ表示にはなりません。
整数と実数とで混合計算を行ったことはありませんでした。
整数と実数との混合計算とは、たとえば、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円の商品の消費税を求める例です。
このプログラムの実行結果は、次の通りになります。
このプログラムで、1.05×360 に () をつけて計算しているのは、
かっこをつけないと、1.05 が先に変換され 1 になってしまうためです。
この例に限らず、コンピュータ特有の計算誤差を減らすためには、計算の順番は重要です。
なお、実数の計算結果やそれを整数に変換した値は、コンパイラやコンピュータの種類により、
多少違ってくることがあるので、ピッタリ378にはならないこともあります。
キャスト変換は、当然、変数に使用することも可能ですし、使い方も同じです。
しかし、場合によっては、整数の答えの方が都合が良い場合も考えられます。
たとえば、消費税の計算は、金額×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にはならないこともあります。
キャスト変換は、当然、変数に使用することも可能ですし、使い方も同じです。
本サイトについて
苦しんで覚えるC言語(苦C)はC言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。




