私はのように見えるラインでいくつかのコードに出くわした:幅がprintf()の精度よりも小さい点は何ですか?
fprintf(fd, "%4.8f", ptr->myFlt);
は、これらの日C++くらいで作業していない、私はprintfのとその同類のドキュメントを読んで、この場合、4は「幅」であることを学びました8は「精度」である。幅は、の最小値としてと定義されています。必要に応じて、空白が出力によって占有され、先頭の空白が埋められます。
はケースである、私は「%の4.8f」のようなテンプレートの点がどうなるかを理解することができない、8(必要に応じてゼロ詰め)以来 既に幅ことを確実にする点後の小数4人が満たされ、超過した。だから、私は小さなプログラムを書いた、ビジュアルC++で次の出力与え
// Formatting width test
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
printf("Need width when decimals are smaller: >%4.1f<\n", 3.4567);
printf("Seems unnecessary when decimals are greater: >%4.8f<\n", 3.4567);
printf("Doesn't matter if argument has no decimal places: >%4.8f<\n", (float)3);
return 0;
}
:最初のケースで
Need width when decimals are smaller: > 3.5<
Seems unnecessary when decimals are greater: >3.45670000<
Doesn't matter if argument has no decimal places: >3.00000000<
を、精度が指定された幅未満であり、実際には大手スペースが追加されます。しかし、精度が高いほど、幅は冗長に見えます。
このような形式の理由はありますか?
いや、理由はありません。そのようなものが必要な場合は '%0 'を使用します。小数点の左側に何桁あるのか気にしないことを明白にするために、「8f」を使用します。 –
私は元のプログラマーが '1234.87654321'のように書式設定された出力を指定することを意図しているでしょう。私が 'printf()'を発明していたのであれば、私はそれをやったかもしれません(そして、非浮動小数点フォーマットの全体的な幅と精度を扱うためにいくつかの文字を用意しています)。 –
なぜ 'c'ではなく' C++ 'にタグをつけましたか? – leftaroundabout