- ベストアンサー
%fと%gについて
C初心者です。入門書を読んでいて疑問に思ったので質問です。 floating point typeの数値をprintfで表示するとき たとえばfloat PI=31.415と宣言していたなら %eとするとアウトプットは3.1415e+01となり、 %Eとすると3.1415E+01となるのは分かるんです。 ただ、%fと%g、%gと%Gでコンパイルしたときのそれぞれの違いが %fと%gでは桁数が違うくらいしか分からなかったし、 %gと%Gでは何が違うのか全く見当がつきません。 もしご存知の方いたら、教えてくださいm(_ _)m
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html より g,G double 引き数を f か e (G 変換の場合は F か E) の形式に変換する。精度は表示する桁数を指定する。精度が指定されない場合は、6桁とみなされる。精度が 0 の場合は、1桁とみなされる。変換される値の指数が、 -4 より小さいか、精度以上の場合に、 e 形式が使用される。変換された結果の小数部分の末尾の 0 は削除される。小数点が表示されるのは、小数点以下に数字が少なくとも一つある場合にだけである。
その他の回答 (1)
- Apr2nd
- ベストアンサー率69% (36/52)
こんな感じのサンプルでも作って動かしてみてください。 こういう違いもあるよってことで。 ================================================== double value1 = 1.0; double value2 = 0.0000123; printf("f=%f\n", value1); printf("g=%g\n", value1); printf("f=%f\n", value2); printf("g=%g\n", value2); printf("G=%G\n", value2); ※コードの前に全角空白が入っています。 ================================================== %gと%Gの違いは%eと%Eと同じですね。
お礼
回答ありがとうございます! 具体的な例で違いを示してくださったおかげで、 #1さんの回答の意味をより確かにつかむことができたと思います!! ものすごく分かり易かったです(笑) ありがとうございました!!
お礼
回答ありがとうございます! 実は数行の文のために一時間くらいPCの前でにらめっこしてましたorz #2さんのコードを実行して、もう1度#1さんの仰ったことをリピートしてみるとものすごいすんなり、しかも詳しく教えて頂けていることが分かって嬉しくなりました(笑) 本当にありがとうございましたっ!