【C言語】printf関数でfloat,double型の値がおかしいときの対処法

1 min

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を使えば正常に値が出力されるので覚えておいてください。