printf関数でfloat型やdouble型の変数を出力しようとしたら、明らかに変な値が出力されたりしていませんか?
例えば以下のプログラムを見てみてください。
#include <stdio.h>
int main()
{
float f = 10.5f;
double d = 20.2;
printf("float:%d", f);
printf("\n");
printf("double:%d", d);
}
一見何も問題ないように見えますが、いざ実行するとこのようになります。
float:0
double:858993459
どうみても出力された結果がおかしいですよね。
なぜこのような減少が起きてしまうのか、対処法も含めて解説していきます。
目次から探す
適切な変換指定子を指定する
出力結果おかしくなる理由は「変換指定子が間違っている」です。
数値を出力するには%d
を指定すると学んだ・知った方が多いかと思いますが、それは半分正解で半分不正解です。
厳密には「%d
はint型などの整数を出力するための変換指定子」で、double型やfloat型といった少数を含む型には対応していないのです。
double型とfloat型は%d
ではなく%f
を使用します。
#include <stdio.h>
int main()
{
float f = 10.5f;
double d = 20.2;
long c = 'a';
printf("float:%f", f);
printf("\n");
printf("double:%f", d);
}
%fを使えば正常に値が出力されるので覚えておいてください。