導入
int と double が混ざった計算では、型の扱いに注意が必要です。自然に変換される「暗黙の変換」と、自分の意図で変換する「キャスト」の両方を覚えましょう。
説明
レッスン5で見たとおり、int どうしの割り算は切り捨てられます。たとえば 5 / 2 は 2.5 ではなく 2 です。これは C言語につまずきやすい代表的な落とし穴です。
#include <stdio.h>
int main(void) {
printf("%d\n", 5 / 2); // 2(小数部分が切り捨てられる)
return 0;
}
小数で計算したいときは、どちらかを double にします。int と double が混ざった式では、C言語が自動で int を double に変換してくれます(暗黙の変換)。
#include <stdio.h>
int main(void) {
double x = 7.0, y = 2.0;
printf("%f\n", x / y); // 3.500000
return 0;
}
自分で明示的に型を変換したいときは、値の前に (型名) を付けます。これをキャストと呼びます。
#include <stdio.h>
int main(void) {
int a = 7, b = 2;
printf("%d\n", a / b); // 3(整数どうしの割り算)
printf("%f\n", (double)a / b); // 3.500000(a を double に変換してから割る)
return 0;
}
(double)a は「a を double に変換した値」を作ります。変換してから割り算しているので、片方が double になり、結果も小数のまま計算されます。
逆に、小数を整数にキャストすると、小数部分が切り捨てられます。
#include <stdio.h>
int main(void) {
double price = 3.9;
int rounded = (int)price; // 3(切り捨て。四捨五入ではない)
printf("%d\n", rounded);
// 平均点を小数で出す例
int total = 250, count = 3;
printf("%f\n", (double)total / count); // 83.333333
return 0;
}
型変換を意識すると、「なぜか小数が出ない」「割り算の結果が思った値と違う」といったC言語特有のつまずきを避けられます。
やってみよう
(double) を付けたり外したりして、結果が 3 と 3.500000 で変わることを確かめましょう。(int) で小数が切り捨てられることも試してください。
演習
int total = 17, count = 4; の平均を、(double) を使って小数で表示してください(結果は 4.250000)。
ヒント1を見る
printf("%f\n", (double)total / count);。