web-dev-qa-db-ja.com

これらの記号文字列は何を意味しますか:%02d%01d?

私は次のようなコード行を見ています:

sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);

シンボリック文字列は、時間、分などごとに表示される数字の数を指していると思います-またはそのような何か、私は完全に確実ではありません。

通常、この種のことは理解できますが、Googleで「%02d%01d」を検索する有用な参照を見つけることができませんでした。私にこれについていくつかの光を当てることができる人はいますか?

22
dRef90

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

同じ規則がJavaにも適用されるはずです。

あなたの場合、それは2桁以上の整数値の出力を意味し、9以下の場合は最初はゼロです

21
AlexanderMP

_%02d_をグーグルで検索する代わりに、sprintf()関数を検索する必要があります。

_%02d_は、「整数を2桁でフォーマットし、ゼロで左詰めする」ことを意味します。したがって、

フォーマットデータ結果
%02d 1 01 
%02d 11 11 
43
Anax

それらはStringをフォーマットしています。 Java特定の構文は _Java.util.Formatter_ で指定されています。

一般的な構文は次のとおりです。

_   %[argument_index$][flags][width][.precision]conversion
_

_%02d_は、ゼロパディング(_0_フラグ)でフォーマットされ、幅_2_の10進整数変換dを実行します。したがって、値が_7_であるint引数は、Stringとして_"07"_にフォーマットされます。

このフォーマット文字列は、たとえば _String.format_


一般的に使用される形式

これらは一般的に使用される形式の一部に過ぎず、構文を網羅的に網羅していません。

数字のゼロパディング

_System.out.printf("Agent %03d to the rescue!", 7);
// Agent 007 to the rescue!
_

正当化の幅

左揃えに_-_フラグを使用できます。それ以外の場合は、正当な理由になります。

_for (Map.Entry<Object,Object> prop : System.getProperties().entrySet()) {
    System.out.printf("%-30s : %50s%n", prop.getKey(), prop.getValue());
}
_

これは次のようなものを出力します:

_Java.version                   :                                 1.6.0_07
Java.vm.name                   :               Java HotSpot(TM) Client VM
Java.vm.vendor                 :                    Sun Microsystems Inc.
Java.vm.specification.name     :       Java Virtual Machine Specification
Java.runtime.name              :          Java(TM) SE Runtime Environment
Java.vendor.url                :                     http://Java.Sun.com/
_

より強力なメッセージフォーマットを使用するには、 _Java.text.MessageFormat_ を使用できます。 _%n_は改行変換です(以下を参照)。

16進変換

_System.out.println(Integer.toHexString(255));
// ff

System.out.printf("%d is %<08X", 255);
// 255 is 000000FF
_

これは_<_相対インデックスも使用することに注意してください(以下を参照)。

浮動小数点フォーマット

_System.out.printf("%+,010.2f%n", 1234.567);
System.out.printf("%+,010.2f%n", -66.6666);
// +01,234.57
// -000066.67
_

より強力な浮動小数点フォーマットを使用するには、代わりに DecimalFormat を使用します。

_%n_はプラットフォーム固有の行区切り文字用

_System.out.printf("%s,%n%s%n", "Hello", "World");
// Hello,
// World
_

_%%_は実際の_%_- sign

_System.out.printf("It's %s%% guaranteed!", 99.99);
// It's 99.99% guaranteed!
_

doubleリテラル_99.99_は、toString()を使用した文字列変換が定義されているDoubleに自動ボックス化されることに注意してください。

_n$_明示的な引数のインデックス付け

_System.out.printf("%1$s! %1$s %2$s! %1$s %2$s %3$s!",
    "Du", "hast", "mich"
);
// Du! Du hast! Du hast mich!
_

_<_相対インデックス付け用

_System.out.format("%s?! %<S?!?!?", "Who's your daddy");
// Who's your daddy?! WHO'S YOUR DADDY?!?!?
_

関連する質問

27

アレクサンダーからの答えは、完全なドキュメントを指します...

質問の簡単な例では、これらの値を2桁で出力します-必要に応じて先頭に0を追加します。

0

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders

この記事は、50年代から今日までのいくつかの言語でのprintf関数のclassについてです。

0
Marco Mariani

は、たとえばC言語のprintfおよびscanf(およびファミリ)のフォーマット文字列に入れる特殊文字で、基本的にと言います。これは何かのプレースホルダーですそれ以外の場合は、文字どおりに印刷/読み取りしないでください。 "

たとえば、printfの書式文字列の_(%02d)_は、10進数の_(%02d)_で印刷され、必要に応じてゼロで少なくとも2桁に埋め込まれる整数変数のプレースホルダーです。

実際の整数は、関数への引数で提供されます。 printf("%02d",5);は画面に_05_を出力します。_(%01d)_も同様に動作します

Javaおよび他の言語も同じです:)

0
Rajnish