web-dev-qa-db-ja.com

Cに先行ゼロがあるprintf

_4917.24_などの浮動小数点数があります。常に小数点の前に5つの文字があり、先頭にゼロがあり、小数点以下が3桁になるように印刷したいと思います。

使用している組み込みシステムでprintf("%05.3f", n)を試しましたが、_*****_と出力されます。フォーマット指定子は正しいですか?

42
fred basset

フォーマット指定子が正しくありません。私のマシンのprintf() manページから:

_0_ゼロパディングを空白ではなく使用する必要があることを示すゼロ「_0_」文字-パディング。 '_-_'は、両方が使用されている場合、 '_0_'をオーバーライドします。

フィールド幅:フィールド幅を指定するオプションの数字文字列。出力文字列の文字数がフィールド幅より少ない場合、フィールド幅を構成するために左側(または左調整インジケータが指定されている場合は右側)に空白が埋め込まれます(先頭のゼロはフラグであることに注意してください。ただし、埋め込まれたゼロはフィールド幅の一部です);

精度:オプションのピリオド、「_._」、その後にオプションで、小数点の後に表示される桁数を指定する精度を与える数字文字列が続きますeおよびf形式、または文字列から印刷される最大文字数。数字列が欠落している場合、精度はゼロとして扱われます。

あなたの場合、フォーマットは_%09.3f_になります:

_#include <stdio.h>

int main(int argc, char **argv)
{
  printf("%09.3f\n", 4917.24);
  return 0;
}
_

出力:

_$ make testapp
cc     testapp.c   -o testapp
$ ./testapp 
04917.240
_

この回答は、これらの詳細が標準に準拠しているprintf()実装を持つ組み込みシステムを条件としていることに注意してください-多くの組み込み環境しないそのような実装があります。

56
Carl Norum