ここから本文です

簡単な質問です C言語のprintf関数で小数点を%fで表示すると、 0.1230000 ...

morasanctuaryさん

2011/1/309:22:30

簡単な質問です

C言語のprintf関数で小数点を%fで表示すると、
0.1230000

のように末尾にいらない0が付いてしまうのですが、この0を消したいときはどのようにすれば良いのでしょうか?

あ、ただ%.3fのようにするのではなく、
0.1234000
のようなときは、小数点以下4行まで表示するようにプログラムを書きたいのです。

このような場合はどうすれば良いのでしょうか?

補足これは、つまり、%gを使えば良いということなんでしょうか?

閲覧数:
6,599
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

rhinosugarさん

編集あり2011/1/504:47:51

masuya_jinchanさん
適切なご説明有難うございます。

質問者さんへ
補足の文言から、masuya_jinchanさん のコメントの
真意を受取りかねている感じがしますので、しつこく
補足させて頂きます。
論文、レポートなどの報告数値の表現で、
0.123という表示は、読む人に最下位「3」には誤差が
あり得る(実験誤差、またはプログラムなら計算誤差)
と認識されます。
一方0.1230という表示なら、0.123までは誤差がない。
しかし、最下位の「0」には誤差があるかもしれない
ということなのだなと受取られる。
だから、結果の数値を何桁表示するかには、報告者の、
実験や計算の精度についての「主張」があるのです。
そういう理由で、単純に小数部下位の0が無意味だと
思わない様にしないといけません。
というmasuya_jinchanさんの御注意と思います。

%gは機械的に、小数部最下位桁の連続0の表示を抑制
するだけなのです。それでよければお使いになっていい
でしょう。
更に気になる問題があれば、ご自分で簡単なプログラム
を実行して自分で思う様に確かめるのが一番ですよ。
その上で質問するのもいいでしょう。



#include_<stdio.h>

int_main(){
__int_i;
__double_x[2]={0.123,0.1234};

__for(i=0;i<2;++i){
____printf("x[%d]_=_%g\n",i,x[i]);
__}
__return_0;
}
/*_出力
x[0]_=_0.123
x[1]_=_0.1234
*/

質問した人からのコメント

2011/1/5 08:15:19

詳しい回答ありがとうございます。
入門書には、%gなんていう変換指定子が存在せずなんなのかなと思い補足させていただいたところ、ほかの回答者さんからの回答を得ましたが、こちらの方が僕の質問に適切に答えが返ってきていたのでこちらを選ばさせていただきました。
%gとは、機械的に消している、ってことだったんですね。ただ、表示にはきれいさがあって便利ですので、有効数字を考えない時の計算などで使わさせていただきます。

ベストアンサー以外の回答

1〜1件/1件中

編集あり2011/1/417:28:19

質問者さんへ
rhinosugarさんの回答は正解だよ。私も知らなかったので、
回答のプログラムを試してみました。%gでいいみたいですね。
ちゃんと貴君の希望のとうりの動作をします。お試しあれ。
0.123と0.1230を区別するときがあります。どうゆうことかというと、測定データなどでは0.123の最下位「3」には誤差があると認識します。一方0.1230では0.123までは正しい(誤差がない)が最下位の「0」には誤差があるということがある。したがって、少数点以下の0(ゼロ)はむやみに抑止しない注意がいる。
老婆心ながら一筆

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。