カスタム数値書式指定文字列

更新 : 2008 年 7 月

カスタム数値書式指定文字列は、ユーザーが 1 つ以上のカスタム数値書式指定子を使用して作成するもので、数値データの書式設定方法を定義します。カスタム数値書式指定文字列は、標準の数値書式指定文字列ではない任意の文字列と同等として定義されます。

カスタム数値書式指定子を次の表に示します。詳細については、表の後の「メモ」を参照してください。

書式指定子

名前

説明

0

ゼロ プレースホルダ

書式が設定される値で、書式指定文字列の '0' に対応する位置に数字がある場合には、この数字が結果の文字列にコピーされます。それ以外の場合は、結果の文字列に '0' が表示されます。整数部の左端の '0' の位置と、小数部の右端の '0' の位置によって、常に結果の文字列に示される桁数が決まります。

指定子が "00" の場合、値は一の位で丸められ、小数点以下のゼロは常に切り捨てられます。たとえば、"00" を指定して 34.5 を書式設定すると、結果の値は 35 になります。

次の例では、ゼロ プレースホルダを含むカスタム書式指定文字列を使って書式設定された複数の値を表示します。

#

桁プレースホルダ

書式が設定される値で、書式指定文字列の '#' に対応する位置に数字がある場合には、この数字が結果の文字列にコピーされます。それ以外の場合は、結果の文字列のこの位置には何も格納されません。

この指定子では、文字列の唯一の桁の値が '0' であっても、この桁が有効桁でない場合には、'0' は表示されません。表示される数値の有効桁の '0' は表示されます。

書式指定文字列が "##" の場合は、値は一の位で丸められ、小数点以下のゼロは常に切り捨てられます。たとえば、"##" を指定して 34.5 を書式設定すると、結果の値は 35 になります。

次の例では、桁プレースホルダを含むカスタム書式指定文字列を使って書式設定された複数の値を表示します。

.

小数点

書式指定文字列の 1 番目の '.' 文字によって、書式設定後の値での小数点の位置が決定します。指定されているほかの '.' 文字は無視されます。

結果の文字列の中で小数点として使用される実際の文字は、書式設定を制御する NumberFormatInfo オブジェクトの NumberDecimalSeparator プロパティによって決定されます。

次の例では、結果として得られるさまざまな文字列の小数点位置を、小数点の書式指定子を使って定義しています。

,

桁区切り記号および数値の位取り

"," 文字は、桁区切り記号指定子および数値位取り指定子の両方として機能します。

桁区切り記号指定子 : 数値の整数部の桁を書式設定する 2 つの桁プレースホルダ (0 または #) の間に 1 つ以上の "," 文字が指定されている場合は、出力の整数部分で各数値グループの間に桁区切り記号文字が挿入されます。

現在の NumberFormatInfo オブジェクトの NumberGroupSeparator プロパティと NumberGroupSizes プロパティによって、桁区切り記号として使用される文字および各数値グループのサイズが決まります。たとえば、文字列 "#,#" およびインバリアント カルチャを使用して数値 1000 が書式設定される場合は、出力が "1,000" となります。

数値位取り指定子 : 明示的または暗黙的な小数点のすぐ左側に 1 つ以上の "," 文字が指定されている場合は、数値位取り指定子が検出されるたびに書式設定対象の数値が 1000 で除算されます。たとえば、"0,," 文字列を使用して数値 1 億が書式設定された場合、出力は "100" となります。

桁区切り記号および数値位取り指定子は、同じ書式指定文字列で使用できます。たとえば、"#,0,," 文字列およびインバリアント カルチャを使用して 10 億の数値を書式設定した場合、出力は "1,000" となります。

桁区切り記号としてコンマを使用する例を次に示します。

数値の位取り指定子としてコンマを使用する例を次に示します。

%

パーセント プレースホルダ

書式指定文字列に '%' 文字が含まれていると、書式設定前に数値に 100 が乗算されます。数値では、書式指定文字列の '%' に対応する位置に適切な記号が挿入されます。使用されるパーセント文字は、現在の NumberFormatInfo クラスによって決まります。

次の例では、パーセント プレースホルダを含むさまざまなカスタム書式指定文字列を定義します。

パーミル プレースホルダ

書式指定文字列に '‰' 文字 (\u2030) が含まれていると、書式設定前に数値に 1000 が乗算されます。返される文字列では、書式指定文字列の '‰' に対応する位置に適切なパーミル記号が挿入されます。使用されるパーミル文字は、カルチャ固有の書式設定情報を指定するオブジェクトの NumberFormatInfo.PerMilleSymbol プロパティによって定義されます。

次の例では、パーミル プレースホルダを含むカスタム書式指定文字列を定義します。

E0

E+0

E -0

e0

e+0

e-0

指数表記

書式指定文字列に "E"、"E+"、"E-"、"e"、"e+"、または "e-" が含まれており、これらの文字の直後に '0' 文字が 1 つ以上続く場合には、指数表記を使用して数値の書式が設定されます。また、数値と指数の間に "E" または "e" が挿入されます。指数表記インジケータの後に続く '0' 文字の数によって、出力の指数部分の最小桁数が決まります。書式 "E+" または "e+" は、記号文字 (プラスまたはマイナス) が常に指数部の前に追加されることを示します。書式 "E"、"E-"、"e"、または "e-" は、指数部が負の値の場合にだけその前に記号文字が追加されることを示します。

次の例では、指数表記の指定子を使用して、さまざまな数値の書式を設定します。

\

エスケープ文字

C# および C++ では、書式指定文字列に円記号が含まれていると、円記号の次の文字がエスケープ シーケンスとして解釈されます。従来の書式指定シーケンスでは、エスケープ文字は '\n' (改行) のように使用されます。

一部の言語では、エスケープ文字をリテラルとして使用する場合、このエスケープ文字の前にエスケープ文字を指定する必要があります。このように指定しないと、コンパイラではリテラルとして使用する文字がエスケープ シーケンスとして解釈されます。'\' を表示するには、文字列 "\\" を使用します。

Visual Basic ではこのエスケープ文字はサポートされていません。ただし ControlChars がエスケープ文字として提供されています。

'ABC'

"ABC"

リテラル文字列

一重引用符または二重引用符で囲まれた文字は、結果の文字列へコピーされます。書式設定には影響しません。

;

セクション区切り記号

';' 文字によって、書式指定文字列の正の数値部分、負の数値部分、ゼロの部分が区切られます。カスタム書式指定文字列に 2 つのセクションが存在する場合、左端のセクションはゼロと正数の書式を定義し、右端のセクションは負数の書式を定義します。3 つのセクションが存在した場合、左端のセクションは正数の書式を、中央のセクションは負数の書式を、右端のセクションはゼロの書式を定義します。

次の例では、セクション区切り記号の書式指定子を使用して、正数、負数、ゼロの各部分に対し、それぞれ異なる書式を設定します。

その他

上記以外のすべての文字

その他の文字は結果の文字列にコピーされ、書式設定には影響しません。

メモ

浮動小数点の無限大値と NaN (非数) 値

Single の浮動小数点型または Double の浮動小数点型が正の無限大、負の無限大、または NaN (非数) である場合は、書式指定文字列とは関係なく、現在適用可能な NumberFormatInfo オブジェクトによって指定される PositiveInfinitySymbolNegativeInfinitySymbol、または NaNSymbol の各プロパティの値が、書式設定された文字列となることに注意してください。

コントロール パネルの設定

コントロール パネルの [地域と言語のオプション] での設定は、書式設定操作によって生成される結果の文字列に影響します。これらの設定は、現在のスレッド カルチャに関連付けられた NumberFormatInfo オブジェクトを初期化するために使用され、現在のスレッド カルチャから書式設定の制御に使用される値が提供されます。コンピュータで使用する設定が異なる場合は、生成される文字列も異なります。

丸めと固定小数点の書式指定文字列

固定小数点の書式指定文字列 (つまり指数表記の書式指定文字を含まない書式指定文字列) の場合は、小数点以下の桁数が小数点の右側にある桁プレースホルダの数と同じである数値に丸められます。書式指定文字列に小数点が含まれていない場合には、最も近い整数に丸められます。数値の桁数が、整数部の桁プレースホルダの数よりも大きい場合には、桁プレースホルダに収まらない桁が、結果の文字列の 1 番目の桁プレースホルダの直前にコピーされます。

セクション区切り記号と条件付き書式設定

数値が正の値、負の値、ゼロのいずれかであるかによって、異なる書式を文字列に適用できます。このように数値の内容によって適用する書式を変更するには、カスタム書式指定文字列に、セミコロンで区切ったセクションを最大 3 つまで作成します。これらのセクションの説明を次に示します。

セクションの数

説明

1 つ

書式指定文字列はすべての値に適用されます。

2 つ

最初のセクションが正の値とゼロに適用され、2 番目のセクションが負の値に適用されます。

書式設定対象の数値が負の数値であるが、2 番目のセクションの書式指定に従って丸めた結果ゼロになる場合には、1 番目のセクションの書式に従ってこのゼロが書式設定されます。

3 つ

最初のセクションが正の値、2 番目のセクションが負の値、3 番目のセクションがゼロに適用されます。

ゼロ以外の値すべてに 1 番目のセクションが適用される場合には、2 番目のセクションが空になる (セミコロンの間に何も表示されない) ことがあります。

書式設定対象の数値がゼロ以外の負の数値であるが、1 番目または 2 番目のセクションの書式に従って丸めた結果ゼロになる場合には、3 番目のセクションの書式に従ってこのゼロが書式設定されます。

セクション区切り記号は、最後の値が書式設定されるときに、数値に関連付けられた既存の書式設定をすべて無視します。たとえば、セクション区切り記号を使用する場合、負の値はマイナス記号を付けずに表示されます。最終的に書式設定された値にマイナス記号を付ける場合は、カスタム書式指定子の中に明示的にマイナス記号を含める必要があります。

セクション区切り記号を使用して、書式設定された文字列を作成する方法を次のコードに示します。

Dim MyPos As Double = 19.95
Dim MyNeg As Double = -19.95
Dim MyZero As Double = 0

' In the U.S. English culture, MyString has the value: $19.95.
Dim MyString As String = MyPos.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: ($19.95).
' The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero")
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

// In the U.S. English culture, MyString has the value: $19.95.
string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

2 つのカスタム書式の例

次のコードは、カスタム数値の書式設定を示しています。どちらの場合も、カスタム書式指定文字列内の桁プレースホルダ (#) によって数値データが表示され、それ以外の文字はすべて出力にコピーされます。

Dim myDouble As Double = 1234567890
Dim myString As String = myDouble.ToString( "(###) ### - ####" )
' The value of myString is "(123) 456 – 7890".

Dim MyInt As Integer = 42
MyString = MyInt.ToString( "My Number = #" )
' In the U.S. English culture, MyString has the value: 
' "My Number = 42".
Double myDouble = 1234567890;
String myString = myDouble.ToString( "(###) ### - ####" );
// The value of myString is "(123) 456 – 7890".

int  MyInt = 42;
MyString = MyInt.ToString( "My Number = #" );
// In the U.S. English culture, MyString has the value: 
// "My Number = 42".

参照

概念

数値書式指定文字列

標準の数値書式指定文字列

参照

NumberFormatInfo

その他の技術情報

型の書式設定

履歴の変更

日付

履歴

理由

2008 年 7 月

パーミル プレースホルダを追加

コンテンツ バグ修正