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を指定すると学んだ・知った方が多いかと思いますが、それは半分正解で半分不正解です。
厳密には「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を使えば正常に値が出力されるので覚えておいてください。