2016-06-21 6 views
-1

変数double MyDouble;を宣言します。printfは末尾のゼロを二重にしません

MyDouble = 1000.0/3.0;を設定してから printf("%g", MyDouble);に設定すると、精度が失われるため、333.333となります。

printf("%lf", MyDouble);を使用すると精度が得られます。

ここでは、MyDouble = 5.0/2.0;を設定し、printf("%lf", MyDouble);を使用すると、2.500000となり、末尾のゼロが得られます。

一般的なケースとして、どのように末尾のゼロを持たない精度を持つことができますか。私はsnprintf%lfのフォーマットを使用して文字列にダブルを書いて、後ろのゼロを取り除くサブルーチンを書くことができますが、より簡単な方法が必要です。

+1

リンクはstd ::する書式指定子を含むprintfのドキュメントを:http://en.cppreference.com/w/cpp/io/c/fprintf –

+4

あなたが欲しいのいずれかくらいの精度かドンこと't。 –

+1

'l'長さ修飾子は' f'指定子には影響しません。 – jxh

答えて

0

zeroの後ろには避けてください。

double a= 5.0; 
double b = 2.0; 
printf("%.2lf\n", a/b); 
1

g変換指定の精度は、最大有効桁数を制御する(7.21.6.1 ¶ 4 C.2011 §参照)。精度は、小数点以下の数字で指定します。あなたは9桁の有効数字がほしいと思う。だから、試してみてください。

printf("%.9g", MyDouble); 
+0

[Ideoneのデモ](http://ideone.com/X09o3i) – jxh

+0

ありがとうございます。これは%f指定子にprecisonを与えますが、末尾のゼロは削除しません。 "%.17g"は、数字を完全な17文字までフォーマットする際に必要なことを行います(小数点以下は不要なゼロを取り除きます)。 – user1228123

+0

答えは最初の文章で述べたように 'g'を持つことを意図していました。 'f 'のコードはタイプミスです。 – jxh

関連する問題