web-dev-qa-db-ja.com

printfを使用してfloatを印刷するときに余分な先行ゼロ?

次のような時間文字列を記述できるようにしたいと思います:1:04:02.1 hours printfを使用します。
次のようなものを記述しようとすると:

printf("%d:%02d:%02.1f hours\n", 1, 4, 2.123456);

私は得る:

1:04:2.1 hours

浮動小数点形式に先行ゼロを追加することは可能ですか?

36
shoosh

とともに %fフォーマット指定子、 "2"は、小数点の前の桁数ではなく、最小文字数として扱われます。したがって、2つの先行数字+小数点+ 1つの小数点を取得するには、4に置き換える必要があります。

printf("%d:%02d:%04.1f hours\n", 1, 4, 2.123456);
68
AndiDog

%04.1f の代わりに %02.1f。ここでの「4」は少なくとも4文字が印刷されることを意味し、「2.1」は3(> 2)文字であるため、4が必要なパディングゼロを有効にします。

15
kennytm