Study & Practice

北海道札幌市のプログラマによる技術とか雑記のブログ

C言語のprintf()における浮動小数点型の扱い方

先日からプログラミング言語C第2版を読んでいてprintf()での浮動小数点の扱い方が気になったので備忘録として残しておこうと思う。

まず通常の使い方はint型の場合とほとんど変わりなく

float f = 0;
printf('%f\n', f);  //0.000000

のように%dから%fに変えるだけでOK
どうやらデフォルトでは小数点は6桁表示されるようだ。

ためしに

float f = 1.2;
printf("%f\n", f);

変数fに1.2を代入してみても小数点以下は6桁になった。
もしかしたらコンパイラごとに違うかもしれないので後日検証してみようと思う

次は出力の桁数を指定する方法だが

float f = 1.2;
printf("%9f\n", f);  //   1.200000

となる。int型同様、一番大きい位以上の位は半角スペースとして出力される

小数点以下の桁数を指定するには

float f =1.2;
printf('%.3f\n', f);  //1.200

と.の後に桁数をしてあげればいい

この2つは併用することができる。例えば

float f = 11.22;
printf('%7.3f\n', f);  // 11.220

のように数字全体と小数点以下を同時に指定することができる。

桁を指定するときに気をつけたいことが

全体で桁数を指定するときは小数点もひと桁と数えられてしまうので
変数の値が123.456の場合
7桁を指定すると「123.456」とスペースが入らずに出力されてしまうこと

全体で桁数と指定した時は最低でも指定した桁数分の幅で出力されるが
小数点以下の指定はバッチリ指定した桁数しか表示されず
「%.3f」と指定すると、小数点4桁目で四捨五入され、3桁に丸められてしまうこと

の2点である。

今回は浮動小数点をprintf()で扱う方法についてまとめた。

浮動小数点が思わぬバグを生む原因になることが多いとのことなので
数学的な視点でも浮動小数点を理解したい。

秋に受験する応用情報処理技術者の試験範囲でもあるので
近いうちに習得して置きたいと思う。