次の方法で共有


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

標準の数値書式指定文字列は、一般的な数値型の書式設定に使用されます。 標準の数値書式指定文字列は、次の [format specifier][precision specifier]形式になります。

  • 書式指定子 は、通貨やパーセントなどの数値書式の種類を指定する単一の英字です。 空白を含む複数の英字を含む数値書式指定文字列は、カスタムの数値書式指定文字列として解釈されます。 詳細については、「 カスタム数値書式指定文字列」を参照してください。

  • 有効桁数指定子 は、結果の文字列の桁数に影響を与える省略可能な整数です。 .NET 7 以降のバージョンでは、最大有効桁数は 999,999,999 です。 .NET 6 では、最大有効桁数の値が Int32.MaxValue。 以前の .NET バージョンでは、有効桁数の範囲は 0 から 99 です。 精度指定子は、数値の文字列表現の桁数を制御します。 数値自体は丸めされません。 丸め操作を実行するには、 Math.CeilingMath.Floor、または Math.Round メソッドを使用します。

    精度指定子が結果文字列の小数部の桁数を制御する場合、結果文字列には、無限に正確な結果に最も近い表現可能な結果に丸められた数値が反映されます。 等しく表現可能な結果が 2 つある場合:

    • .NET Core 2.0 までの .NET Framework と .NET Core では、ランタイムは最下位桁 (つまり、 MidpointRounding.AwayFromZeroを使用) で結果を選択します。
    • .NET Core 2.1 以降では、ランタイムは結果を最下位の数字 (つまり、 MidpointRounding.ToEvenを使用) で選択します。

    精度指定子は、結果文字列の桁数を決定します。 結果文字列に先頭または末尾のスペースを埋め込むには、 複合書式設定機能を 使用し、書式項目で 幅コンポーネント を定義します。

標準の数値書式指定文字列は、次の方法でサポートされています。

ヒント

書式設定ユーティリティ (.NET Core Windows フォーム アプリケーション) をダウンロードして、数値または日付と時刻の値に書式指定文字列を適用し、結果文字列を表示できます。 ソース コードは 、C#Visual Basic で使用できます。

標準書式指定子

次の表では、標準の数値書式指定子について説明し、各書式指定子によって生成されたサンプル出力を表示します。 標準の数値書式指定文字列の使用に関する詳細については 、「メモ 」セクションを参照し、使用の包括的な図については 「コード例 」セクションを参照してください。

特定のカルチャの書式設定された文字列の結果は、次の例とは異なる場合があります。 オペレーティング システムの設定、ユーザー設定、環境変数、使用している .NET のバージョンはすべて、形式に影響を与える可能性があります。 たとえば、.NET 5 以降では、.NET はプラットフォーム間でカルチャ形式を統合しようとします。 詳細については、「 .NET のグローバリゼーションと ICU」を参照してください。

書式指定子 名前 説明 例示
"B" または "b" バイナリ 結果: バイナリ文字列。

サポート対象: 整数型のみ (.NET 8 以降)。

精度指定子: 結果文字列の桁数。

詳細情報: バイナリ ("B") 書式指定子
42 ("B")
-> 101010

255 ("b16")
-> 0000000011111111
"C" または "c" 通貨 結果: 通貨値。

サポート対象: すべての数値型。

有効桁数指定子: 10 進数の桁数。

既定の精度指定子: NumberFormatInfo.CurrencyDecimalDigitsによって定義されます。

詳細: 通貨 ("C") 書式指定子
123.456 ("C", en-US)
-> \$123.46

123.456 ("C", fr-FR)
-> 123,46 €

123.456 ("C", ja-JP)
-> ¥123

-123.456 ("C3", en-US)
-> (\$123.456)

-123.456 ("C3", fr-FR)
-> -123,456 €

-123.456 ("C3", ja-JP)
-> -¥123.456
"D" または "d" 小数 結果: 省略可能な負符号を持つ整数の数字。

サポート対象: 整数型のみ。

有効桁数指定子: 最小桁数。

既定の有効桁数指定子: 必要な最小桁数。

詳細: Decimal("D") 書式指定子
1234 ("D")
-> 1234

-1234 ("D6")
-> -001234
"E" または "e" 指数関数 (科学的) 結果: 指数表記。

サポート対象: すべての数値型。

有効桁数指定子: 10 進数の桁数。

既定の精度指定子: 6。

詳細: 指数 ("E") 書式指定子
1052.0329112756 ("E", en-US)
-> 1.052033E+003

1052.0329112756 ("e", fr-FR)
-> 1,052033e+003

-1052.0329112756 ("e2", en-US)
-> -1.05e+003

-1052.0329112756 ("E2", fr-FR)
-> -1,05E+003
"F" または "f" 固定小数点 結果: 省略可能な負符号を持つ整数と 10 進数。

サポート対象: すべての数値型。

有効桁数指定子: 10 進数の桁数。

既定の精度指定子: NumberFormatInfo.NumberDecimalDigitsによって定義されます。

詳細: Fixed-Point ("F") 書式指定子
1234.567 ("F", en-US)
-> 1234.57

1234.567 ("F", de-DE)
-> 1234,57

1234 ("F1", en-US)
-> 1234.0

1234 ("F1", de-DE)
-> 1234,0

-1234.56 ("F4", en-US)
-> -1234.5600

-1234.56 ("F4", de-DE)
-> -1234,5600
"G" または "g" 全般 結果: 固定小数点表記または指数表記の方がコンパクトです。

サポート対象: すべての数値型。

有効桁数指定子: 有効桁数。

既定の精度指定子: 数値型によって異なります。

詳細: 一般 ("G") 書式指定子
-123.456 ("G", en-US)
-> -123.456

-123.456 ("G", sv-SE)
-> -123,456

123.4546 ("G4", en-US)
-> 123.5

123.4546 ("G4", sv-SE)
-> 123,5

-1.234567890e-25 ("G", en-US)
-> -1.23456789E-25

-1.234567890e-25 ("G", sv-SE)
-> -1,23456789E-25
"N" または "n" 番号 結果: 整数および 10 進数、グループ区切り記号、および省略可能な負符号を持つ小数点区切り記号。

サポート対象: すべての数値型。

有効桁数指定子: 小数点以下の桁数を指定します。

既定の精度指定子: NumberFormatInfo.NumberDecimalDigitsによって定義されます。

詳細: 数値 ("N") 書式指定子
1234.567 ("N", en-US)
-> 1,234.57

1234.567 ("N", ru-RU)
-> 1 234,57

1234 ("N1", en-US)
-> 1,234.0

1234 ("N1", ru-RU)
-> 1 234,0

-1234.56 ("N3", en-US)
-> -1,234.560

-1234.56 ("N3", ru-RU)
-> -1 234,560
"P" または "p" パーセント 結果: 数値に 100 を乗算し、パーセント記号で表示します。

サポート対象: すべての数値型。

有効桁数指定子: 小数点以下の桁数を指定します。

既定の精度指定子: NumberFormatInfo.PercentDecimalDigitsによって定義されます。

詳細: パーセント ("P") 書式指定子
1 ("P", en-US)
-> 100.00 %

1 ("P", fr-FR)
-> 100,00 %

-0.39678 ("P1", en-US)
-> -39.7 %

-0.39678 ("P1", fr-FR)
-> -39,7 %
"R" または "r" 往復 結果: 同じ数値にラウンド トリップできる文字列。

サポート: SingleDouble、および BigInteger

注: BigInteger の種類にのみ推奨されます。 Double型の場合は 、"G17" を使用します。Single型には "G9" を使用します。
有効桁数指定子: 無視されます。

詳細情報: ラウンド トリップ ("R") 書式指定子
123456789.12345678 ("R")
-> 123456789.12345678

-1234567890.12345678 ("R")
-> -1234567890.1234567
"X" または "x" 16 進 数 結果: 16 進数の文字列。

サポート対象: 整数型のみ。

精度指定子: 結果文字列の桁数。

詳細情報: 16 進数 ("X") 書式指定子
255 ("X")
-> FF

-1 ("x")
-> ff

255 ("x4")
-> 00ff

-1 ("X4")
-> 00FF
その他の 1 文字 不明な指定子 結果: 実行時に FormatException をスローします。

標準の数値書式指定文字列を使用する

この記事の C# の例は、 Try.NET インライン コード ランナーとプレイグラウンドで実行されます。 [ 実行 ] ボタンを選択して、対話型ウィンドウで例を実行します。 コードを実行したら、コードを変更し、[再実行] を選択して変更したコードを 実行 できます。 変更後のコードが対話型ウィンドウで実行されるか、コンパイルできなかった場合、対話型ウィンドウにすべての C# コンパイラ エラー メッセージが表示されます。

標準の数値書式指定文字列を使用して、次のいずれかの方法で数値の書式設定を定義できます。

  • TryFormat メソッドまたはformat パラメーターを持つToString メソッドのオーバーロードに渡すことができます。 次の例では、現在のカルチャ (この場合は en-US カルチャ) の通貨文字列として数値を書式設定します。

    decimal value = 123.456m;
    Console.WriteLine(value.ToString("C2"));
    // Displays $123.46
    
    Dim value As Decimal = 123.456d
    Console.WriteLine(value.ToString("C2"))
    ' Displays $123.46
    
  • String.FormatConsole.WriteLineStringBuilder.AppendFormatなどのメソッドで使用される書式指定項目のformatString引数として指定できます。 詳細については、「 複合書式」を参照してください。 次の例では、書式指定項目を使用して文字列に通貨値を挿入します。

    decimal value = 123.456m;
    Console.WriteLine($"Your account balance is {value:C2}.");
    // Displays "Your account balance is $123.46."
    
    Dim value As Decimal = 123.456d
    Console.WriteLine("Your account balance is {0:C2}.", value)
    ' Displays "Your account balance is $123.46."
    

    必要に応じて、 alignment 引数を指定して、数値フィールドの幅と、その値が右揃えか左揃えかを指定できます。 次の例では、28 文字のフィールドで通貨値を左揃えにし、14 文字のフィールドで通貨値を右揃えにします。

    decimal[] amounts = { 16305.32m, 18794.16m };
    Console.WriteLine("   Beginning Balance           Ending Balance");
    Console.WriteLine("   {0,-28:C2}{1,14:C2}", amounts[0], amounts[1]);
    // Displays:
    //        Beginning Balance           Ending Balance
    //        $16,305.32                      $18,794.16
    
    Dim amounts() As Decimal = {16305.32d, 18794.16d}
    Console.WriteLine("   Beginning Balance           Ending Balance")
    Console.WriteLine("   {0,-28:C2}{1,14:C2}", amounts(0), amounts(1))
    ' Displays:
    '        Beginning Balance           Ending Balance
    '        $16,305.32                      $18,794.16      
    
  • 挿入文字列の補間式項目の formatString 引数として指定できます。 詳細については、C# リファレンスの 文字列補間 に関する記事、または Visual Basic リファレンスの 挿入文字列 に関する記事を参照してください。

次のセクションでは、各標準の数値書式指定文字列について詳しく説明します。

バイナリ書式指定子 (B)

バイナリ ("B") 書式指定子は、数値を 2 進数の文字列に変換します。 この形式は、整数型でのみサポートされ、.NET 8 以降でのみサポートされます。

精度指定子は、結果の文字列に必要な最小桁数を示します。 必要に応じて、数値を左にゼロで埋め込み、精度指定子によって指定された桁数を生成します。

結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けません。

通貨書式指定子 (C)

"C" (通貨) 書式指定子は、数値を通貨金額を表す文字列に変換します。 精度指定子は、結果文字列内の小数点以下の桁数を示します。 精度指定子を省略すると、既定の有効桁数は NumberFormatInfo.CurrencyDecimalDigits プロパティによって定義されます。

書式設定する値が、指定された小数点以下の桁数または既定の桁数を超える場合、小数部の値は結果文字列で丸められます。 指定した小数点以下の桁数の右側の値が 5 以上の場合、結果文字列の最後の桁は 0 から切り捨てられます。

結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けます。 次の表に、返される文字列の書式設定を制御する NumberFormatInfo プロパティを示します。

NumberFormatInfo プロパティ 説明
CurrencyPositivePattern 正の値の通貨記号の配置を定義します。
CurrencyNegativePattern 負の値の通貨記号の配置を定義し、負の符号をかっこまたは NegativeSign プロパティで表すかどうかを指定します。
NegativeSign かっこが使用されていないことを示 CurrencyNegativePattern 場合に使用される負の符号を定義します。
CurrencySymbol 通貨記号を定義します。
CurrencyDecimalDigits 通貨値の既定の 10 進数を定義します。 この値は、精度指定子を使用してオーバーライドできます。
CurrencyDecimalSeparator 整数と 10 進数を区切る文字列を定義します。
CurrencyGroupSeparator 整数のグループを区切る文字列を定義します。
CurrencyGroupSizes グループに表示される整数の桁数を定義します。

次の例では、通貨書式指定子を使用して Double 値を書式設定します。

double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3",
                  CultureInfo.CreateSpecificCulture("da-DK")));
// The example displays the following output on a system whose
// current culture is English (United States):
//       $12,345.68
//       $12,345.679
//       12.345,679 kr
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture))

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture))

Console.WriteLine(value.ToString("C3", _
                  CultureInfo.CreateSpecificCulture("da-DK")))
' The example displays the following output on a system whose
' current culture is English (United States):
'       $12,345.68
'       $12,345.679
'       kr 12.345,679

10 進書式指定子 (D)

"D" (または 10 進数) 書式指定子は、数値を 10 進数 (0 から 9) の文字列に変換します。数値が負の場合は、先頭に負符号が付きます。 この形式は、整数型でのみサポートされます。

精度指定子は、結果の文字列に必要な最小桁数を示します。 必要に応じて、数値を左にゼロで埋め込み、精度指定子によって指定された桁数を生成します。 有効桁数指定子が指定されていない場合、既定値は、先頭にゼロを付けずに整数を表すために必要な最小値です。

結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けます。 次の表に示すように、1 つのプロパティが結果文字列の書式設定に影響します。

NumberFormatInfo プロパティ 説明
NegativeSign 数値が負であることを示す文字列を定義します。

次の例では、10 進書式指定子を使用して Int32 値を書式設定します。

int value;

value = 12345;
Console.WriteLine(value.ToString("D"));
// Displays 12345
Console.WriteLine(value.ToString("D8"));
// Displays 00012345

value = -12345;
Console.WriteLine(value.ToString("D"));
// Displays -12345
Console.WriteLine(value.ToString("D8"));
// Displays -00012345
Dim value As Integer

value = 12345
Console.WriteLine(value.ToString("D"))
' Displays 12345   
Console.WriteLine(value.ToString("D8"))
' Displays 00012345

value = -12345
Console.WriteLine(value.ToString("D"))
' Displays -12345
Console.WriteLine(value.ToString("D8"))
' Displays -00012345

指数書式指定子 (E)

指数 ("E") 書式指定子は、数値を "-d.ddd... 形式の文字列に変換します。E+ddd" または "-d.ddd...e+ddd"。各 "d" は数字 (0 から 9) を示します。 数値が負の場合、文字列は負符号で始まります。 小数点の前には常に 1 桁の数字が付けられます。

精度指定子は、小数点の後に必要な桁数を示します。 有効桁数指定子を省略すると、小数点の後に 6 桁の既定値が使用されます。

書式指定子の大文字と小文字は、指数の前に "E" または "e" を付けるかどうかを示します。 指数は常に、正符号または負符号と 3 桁以上で構成されます。 指数は、必要に応じて、この最小値を満たすためにゼロで埋め込まれます。

結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けます。 次の表に、返される文字列の書式設定を制御する NumberFormatInfo プロパティを示します。

NumberFormatInfo プロパティ 説明
NegativeSign 係数と指数の両方に対して数値が負であることを示す文字列を定義します。
NumberDecimalSeparator 係数の整数桁と 10 進数を区切る文字列を定義します。
PositiveSign 指数が正であることを示す文字列を定義します。

次の例では、指数書式指定子を使用して Double 値を書式設定します。

double value = 12345.6789;
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture));
// Displays 1.234568E+004

Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture));
// Displays 1.2345678900E+004

Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture));
// Displays 1.2346e+004

Console.WriteLine(value.ToString("E",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 1,234568E+004
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture))
' Displays 1.234568E+004

Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture))
' Displays 1.2345678900E+004

Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture))
' Displays 1.2346e+004

Console.WriteLine(value.ToString("E", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 1,234568E+004

固定小数点書式指定子 (F)

固定小数点 ("F") 書式指定子は、数値を "-ddd.ddd..." という形式の文字列に変換します。ここで、各 "d" は数字 (0 から 9) を示します。 数値が負の場合、文字列は負符号で始まります。

精度指定子は、小数点以下の桁数を示します。 有効桁数指定子を省略すると、現在の NumberFormatInfo.NumberDecimalDigits プロパティは数値の有効桁数を提供します。

結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けます。 次の表に、結果文字列の書式設定を制御する NumberFormatInfo オブジェクトのプロパティを示します。

NumberFormatInfo プロパティ 説明
NegativeSign 数値が負であることを示す文字列を定義します。
NumberDecimalSeparator 整数桁と 10 進数を区切る文字列を定義します。
NumberDecimalDigits 既定の 10 進数を定義します。 この値は、精度指定子を使用してオーバーライドできます。

次の例では、固定小数点書式指定子を使用して DoubleInt32 値を書式設定します。

int integerNumber;
integerNumber = 17843;
Console.WriteLine(integerNumber.ToString("F",
                  CultureInfo.InvariantCulture));
// Displays 17843.00

integerNumber = -29541;
Console.WriteLine(integerNumber.ToString("F3",
                  CultureInfo.InvariantCulture));
// Displays -29541.000

double doubleNumber;
doubleNumber = 18934.1879;
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture));
// Displays 18934.19

Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture));
// Displays 18934

doubleNumber = -1898300.1987;
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture));
// Displays -1898300.2

Console.WriteLine(doubleNumber.ToString("F3",
                  CultureInfo.CreateSpecificCulture("es-ES")));
// Displays -1898300,199
Dim integerNumber As Integer
integerNumber = 17843
Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 17843.00

integerNumber = -29541
Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture))
' Displays -29541.000

Dim doubleNumber As Double
doubleNumber = 18934.1879
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 18934.19

Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture))
' Displays 18934

doubleNumber = -1898300.1987
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture))
' Displays -1898300.2

Console.WriteLine(doubleNumber.ToString("F3", _
                  CultureInfo.CreateSpecificCulture("es-ES")))
' Displays -1898300,199                        

一般的な書式指定子 (G)

一般 ("G") 書式指定子は、数値の種類と精度指定子が存在するかどうかに応じて、数値を固定小数点表記または指数表記のよりコンパクトに変換します。 精度指定子は、結果文字列に表示できる有効桁数の最大数を定義します。 有効桁数指定子を省略した場合、次の表に示すように、数値の型によって既定の有効桁数が決まります。

数値型 既定の有効桁数
Byte または SByte 3 桁の数字
Int16 または UInt16 5 桁の数字
Int32 または UInt32 10 桁の数字
Int64 19 桁の数字
UInt64 20 桁の数字
BigInteger 無制限 ( "R" と同じ)
Half 数値を表す最小のラウンドトリップ可能な桁数
Single 数値を表す最小のラウンドトリップ可能な桁数 (.NET Framework では G7 が既定値)
Double 数値を表す最小のラウンドトリップ可能な桁数 (.NET Framework では G15 が既定値)
Decimal 数値を表す最小のラウンドトリップ可能な桁数

指数表記で数値を表した結果の指数が -5 より大きく、有効桁数指定子より小さい場合は、固定小数点表記が使用されます。それ以外の場合は、科学的表記が使用されます。 結果には、必要に応じて小数点が含まれており、小数点の後の末尾のゼロは省略されます。 精度指定子が存在し、結果の有効桁数が指定された有効桁数を超えた場合、末尾の余分な数字は丸めて削除されます。

ただし、数値が Decimal で、精度指定子を省略した場合は、常に固定小数点表記が使用され、末尾のゼロは保持されます。

指数表記を使用する場合、書式指定子が "G" の場合は結果の指数の前に "E" が付き、書式指定子が "g" の場合は "e" が付きます。 指数には、少なくとも 2 桁の数字が含まれています。 これは指数書式指定子によって生成される指数表記の形式とは異なります。指数には 3 桁以上が含まれます。

Double値と共に使用すると、"G17" 書式指定子によって元のDouble値がラウンド トリップに成功します。 これは、 Double は IEEE 754-2008 準拠の倍精度 (binary64) 浮動小数点数であり、有効桁数が最大 17 桁であるためです。 .NET Framework では、 "R" 書式指定子の代わりに使用することをお勧めします。場合によっては、"R" が倍精度浮動小数点値のラウンドトリップに失敗する場合があるためです。

Single値と共に使用すると、"G9" 書式指定子によって元のSingle値がラウンド トリップに成功します。 これは、 Single は IEEE 754-2008 準拠の単精度 (binary32) 浮動小数点数であり、有効桁数が最大 9 桁であるためです。 パフォーマンス上の理由から、 "R" 書式指定子の代わりに使用することをお勧めします。

結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けます。 次の表に、結果文字列の書式設定を制御する NumberFormatInfo プロパティを示します。

NumberFormatInfo プロパティ 説明
NegativeSign 数値が負であることを示す文字列を定義します。
NumberDecimalSeparator 整数桁と 10 進数を区切る文字列を定義します。
PositiveSign 指数が正であることを示す文字列を定義します。

次の例では、汎用書式指定子を使用して、並べ替えた浮動小数点値を書式設定します。

double number;

number = 12345.6789;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays  12345.6789
Console.WriteLine(number.ToString("G",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 12345,6789

Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture));
// Displays 12345.68

number = .0000023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 2.3E-06
Console.WriteLine(number.ToString("G",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 2,3E-06

number = .0023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 0.0023

number = 1234;
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture));
// Displays 1.2E+03

number = Math.PI;
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture));
// Displays 3.1416
Dim number As Double

number = 12345.6789
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays  12345.6789
Console.WriteLine(number.ToString("G", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 12345,6789

Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture))
' Displays 12345.68 

number = .0000023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 2.3E-06       
Console.WriteLine(number.ToString("G", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 2,3E-06

number = .0023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 0.0023

number = 1234
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture))
' Displays 1.2E+03

number = Math.Pi
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture))
' Displays 3.1416    

数値書式指定子 (N)

数値 ("N") 書式指定子は、数値を "-d,ddd,ddd.ddd...." という形式の文字列に変換します。ここで、"-" は必要に応じて負の数の記号を示し、"d" は数字 (0 から 9)、"、グループ区切り記号を示し、"." は小数点記号を示します。 精度指定子は、小数点の後に必要な桁数を示します。 有効桁数指定子を省略すると、現在の NumberFormatInfo.NumberDecimalDigits プロパティによって小数点以下の桁数が定義されます。

結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けます。 次の表に、結果文字列の書式設定を制御する NumberFormatInfo プロパティを示します。

NumberFormatInfo プロパティ 説明
NegativeSign 数値が負であることを示す文字列を定義します。
NumberNegativePattern 負の値の形式を定義し、負の符号をかっこまたは NegativeSign プロパティで表すかどうかを指定します。
NumberGroupSizes グループ区切り記号の間に表示される整数の桁数を定義します。
NumberGroupSeparator 整数のグループを区切る文字列を定義します。
NumberDecimalSeparator 整数と 10 進数を区切る文字列を定義します。
NumberDecimalDigits 既定の 10 進数を定義します。 この値は、精度指定子を使用してオーバーライドできます。

次の例では、数値書式指定子を使用して、並べ替えた浮動小数点値を書式設定します。

double dblValue = -12445.6789;
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture));
// Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1",
                  CultureInfo.CreateSpecificCulture("sv-SE")));
// Displays -12 445,7

int intValue = 123456789;
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture));
// Displays 123,456,789.0
Dim dblValue As Double = -12445.6789
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture))
' Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1", _
                  CultureInfo.CreateSpecificCulture("sv-SE")))
' Displays -12 445,7

Dim intValue As Integer = 123456789
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture))
' Displays 123,456,789.0 

パーセント書式指定子 (P)

パーセント ("P") 書式指定子は、数値に 100 を乗算し、パーセンテージを表す文字列に変換します。 精度指定子は、小数点以下の桁数を示します。 有効桁数指定子を省略すると、現在の PercentDecimalDigits プロパティによって指定された既定の数値精度が使用されます。

次の表に、返される文字列の書式設定を制御する NumberFormatInfo プロパティを示します。

NumberFormatInfo プロパティ 説明
PercentPositivePattern 正の値のパーセント記号の配置を定義します。
PercentNegativePattern 負の値のパーセント記号と負の記号の配置を定義します。
NegativeSign 数値が負であることを示す文字列を定義します。
PercentSymbol パーセント記号を定義します。
PercentDecimalDigits パーセント値の既定の 10 進数を定義します。 この値は、精度指定子を使用してオーバーライドできます。
PercentDecimalSeparator 整数と 10 進数を区切る文字列を定義します。
PercentGroupSeparator 整数のグループを区切る文字列を定義します。
PercentGroupSizes グループに表示される整数の桁数を定義します。

次の例では、浮動小数点値をパーセント書式指定子で書式設定します。

double number = .2468013;
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture));
// Displays 24.68 %
Console.WriteLine(number.ToString("P",
                  CultureInfo.CreateSpecificCulture("hr-HR")));
// Displays 24,68%
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture));
// Displays 24.7 %
Dim number As Double = .2468013
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture))
' Displays 24.68 %
Console.WriteLine(number.ToString("P", _
                  CultureInfo.CreateSpecificCulture("hr-HR")))
' Displays 24,68%     
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture))
' Displays 24.7 %

ラウンド トリップ書式指定子 (R)

ラウンド トリップ ("R") 書式指定子は、文字列に変換された数値が同じ数値に解析されるようにしようとします。 この形式は、 HalfSingleDouble、および BigInteger の型でのみサポートされます。

.NET Framework および 3.0 より前のバージョンの .NET Core では、"R" 書式指定子は、場合によっては Double 値のラウンドトリップに失敗します。 Double値とSingle値の両方で、"R" 書式指定子のパフォーマンスが比較的低くなります。 代わりに、Double値に "G17" 書式指定子を使用し、"G9" 書式指定子を使用して、Single値を正常にラウンドトリップすることをお勧めします。

この指定子を使用して BigInteger 値が書式設定されている場合、その文字列形式には、 BigInteger 値のすべての有効桁数が含まれます。

有効桁数指定子は含めることができますが、無視されます。 この指定子を使用する場合、ラウンド トリップは有効桁数よりも優先されます。 結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けます。 次の表に、結果文字列の書式設定を制御する NumberFormatInfo プロパティを示します。

NumberFormatInfo プロパティ 説明
NegativeSign 数値が負であることを示す文字列を定義します。
NumberDecimalSeparator 整数桁と 10 進数を区切る文字列を定義します。
PositiveSign 指数が正であることを示す文字列を定義します。

次の例では、ラウンド トリップ書式指定子を使用して BigInteger 値を書式設定します。

using System;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      var value = BigInteger.Pow(Int64.MaxValue, 2);
      Console.WriteLine(value.ToString("R"));
   }
}
// The example displays the following output:
//      85070591730234615847396907784232501249
Imports System.Numerics

Module Example
    Public Sub Main()
        Dim value = BigInteger.Pow(Int64.MaxValue, 2)
        Console.WriteLine(value.ToString("R"))
    End Sub
End Module
' The example displays the following output:
'      85070591730234615847396907784232501249  

重要

場合によっては、"R" 標準の数値書式指定文字列で書式設定された Double 値が、 /platform:x64 スイッチまたは /platform:anycpu スイッチを使用してコンパイルされ、64 ビット システムで実行された場合、ラウンド トリップが正常に行われません。 詳細については、次の段落を参照してください。

/platform:x64または/platform:anycpuスイッチを使用してコンパイルし、64 ビット システムで実行すると、"R" 標準の数値書式指定文字列で書式設定されたDouble値が正しくラウンドトリップしないという問題を回避するには、"G17" 標準の数値書式指定文字列を使用してDouble値を書式設定できます。 次の例では、"R" 書式指定文字列を使用し、 Double 値が正しくラウンドトリップしません。また、"G17" 書式指定文字列を使用して元の値を正常にラウンドトリップします。

Console.WriteLine("Attempting to round-trip a Double with 'R':");
double initialValue = 0.6822871999174;
string valueString = initialValue.ToString("R",
                                           CultureInfo.InvariantCulture);
double roundTripped = double.Parse(valueString,
                                   CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped:R}: {initialValue.Equals(roundTripped)}\n");

Console.WriteLine("Attempting to round-trip a Double with 'G17':");
string valueString17 = initialValue.ToString("G17",
                                             CultureInfo.InvariantCulture);
double roundTripped17 = double.Parse(valueString17,
                                     CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped17:R}: {initialValue.Equals(roundTripped17)}\n");
// If compiled to an application that targets anycpu or x64 and run on an x64 system,
// the example displays the following output:
//       Attempting to round-trip a Double with 'R':
//       .NET Framework:
//       0.6822871999174 = 0.68228719991740006: False
//       .NET:
//       0.6822871999174 = 0.6822871999174: True
//
//       Attempting to round-trip a Double with 'G17':
//       0.6822871999174 = 0.6822871999174: True
Imports System.Globalization

Module Example
    Public Sub Main()
        Console.WriteLine("Attempting to round-trip a Double with 'R':")
        Dim initialValue As Double = 0.6822871999174
        Dim valueString As String = initialValue.ToString("R",
                                                 CultureInfo.InvariantCulture)
        Dim roundTripped As Double = Double.Parse(valueString,
                                                  CultureInfo.InvariantCulture)
        Console.WriteLine("{0:R} = {1:R}: {2}",
                          initialValue, roundTripped, initialValue.Equals(roundTripped))
        Console.WriteLine()

        Console.WriteLine("Attempting to round-trip a Double with 'G17':")
        Dim valueString17 As String = initialValue.ToString("G17",
                                                   CultureInfo.InvariantCulture)
        Dim roundTripped17 As Double = double.Parse(valueString17,
                                              CultureInfo.InvariantCulture)
        Console.WriteLine("{0:R} = {1:R}: {2}",
                          initialValue, roundTripped17, initialValue.Equals(roundTripped17))
    End Sub
End Module
' If compiled to an application that targets anycpu or x64 and run on an x64 system,
' the example displays the following output:
'       Attempting to round-trip a Double with 'R':
'       .NET Framework:
'       0.6822871999174 = 0.68228719991740006: False
'       .NET:
'       0.6822871999174 = 0.6822871999174: True
'
'       Attempting to round-trip a Double with 'G17':
'       0.6822871999174 = 0.6822871999174: True

16 進数書式指定子 (X)

16 進数 ("X") 書式指定子は、数値を 16 進数の文字列に変換します。 書式指定子の大文字と小文字は、9 より大きい 16 進数に大文字と小文字のどちらを使用するかを示します。 たとえば、"X" を使用して "ABCDEF" を生成し、"x" を使用して "abcdef" を生成します。 この形式は、整数型でのみサポートされます。

精度指定子は、結果の文字列に必要な最小桁数を示します。 必要に応じて、数値を左にゼロで埋め込み、精度指定子によって指定された桁数を生成します。

結果文字列は、現在の NumberFormatInfo オブジェクトの書式設定情報の影響を受けません。

次の例では、 Int32 値を 16 進数書式指定子で書式設定します。

int value;

value = 0x2045e;
Console.WriteLine(value.ToString("x"));
// Displays 2045e
Console.WriteLine(value.ToString("X"));
// Displays 2045E
Console.WriteLine(value.ToString("X8"));
// Displays 0002045E

value = 123456789;
Console.WriteLine(value.ToString("X"));
// Displays 75BCD15
Console.WriteLine(value.ToString("X2"));
// Displays 75BCD15
Dim value As Integer

value = &h2045e
Console.WriteLine(value.ToString("x"))
' Displays 2045e
Console.WriteLine(value.ToString("X"))
' Displays 2045E
Console.WriteLine(value.ToString("X8"))
' Displays 0002045E

value = 123456789
Console.WriteLine(value.ToString("X"))
' Displays 75BCD15
Console.WriteLine(value.ToString("X2"))
' Displays 75BCD15

注記

このセクションには、標準の数値書式指定文字列の使用に関する追加情報が含まれています。

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

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

さらに、 CultureInfo(String) コンストラクターを使用して、現在のシステム カルチャと同じカルチャを表す新しい CultureInfo オブジェクトをインスタンス化する場合は、コントロール パネルの [地域と言語のオプション] 項目によって確立されたすべてのカスタマイズが新しい CultureInfo オブジェクトに適用されます。 CultureInfo(String, Boolean) コンストラクターを使用して、システムのカスタマイズを反映しないCultureInfo オブジェクトを作成できます。

NumberFormatInfo プロパティ

書式設定は、現在の NumberFormatInfo オブジェクトのプロパティの影響を受けます。現在のカルチャによって暗黙的に提供されるか、書式設定を呼び出すメソッドの IFormatProvider パラメーターによって明示的に提供されます。 そのパラメーターの NumberFormatInfo または CultureInfo オブジェクトを指定します。

数値の書式設定で使用されるパターンまたは文字列のカスタマイズについては、 NumberFormatInfo クラスのトピックを参照してください。

整数型と浮動小数点型

標準の数値書式指定子の一部の説明では、整数型または浮動小数点型を参照します。 整数の数値型は、 ByteSByteInt16Int32Int64UInt16UInt32UInt64、および BigIntegerです。 浮動小数点数値型は、 DecimalHalfSingle、および Doubleです。

浮動小数点の無限大と NaN

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

コード例

次の例では、en-US カルチャとすべての標準の数値書式指定子を使用して、整数と浮動小数点の数値を書式設定します。 この例では、2 つの特定の数値型 (DoubleInt32) を使用しますが、他の数値基本型 (ByteSByteInt16Int32Int64UInt16UInt32UInt64BigIntegerDecimalHalfSingle) に対しても同様の結果が得られます。

// Display string representations of numbers for en-us culture
CultureInfo ci = new CultureInfo("en-us");

// Output floating point values
double floating = 10761.937554;
Console.WriteLine($"C: {floating.ToString("C", ci)}");           // Displays "C: $10,761.94"
Console.WriteLine($"E: {floating.ToString("E03", ci)}");         // Displays "E: 1.076E+004"
Console.WriteLine($"F: {floating.ToString("F04", ci)}");         // Displays "F: 10761.9376"
Console.WriteLine($"G: {floating.ToString("G", ci)}");           // Displays "G: 10761.937554"
Console.WriteLine($"N: {floating.ToString("N03", ci)}");         // Displays "N: 10,761.938"
Console.WriteLine($"P: {(floating/10000).ToString("P02", ci)}"); // Displays "P: 107.62 %"
Console.WriteLine($"R: {floating.ToString("R", ci)}");           // Displays "R: 10761.937554"
Console.WriteLine();

// Output integral values
int integral = 8395;
Console.WriteLine($"C: {integral.ToString("C", ci)}");           // Displays "C: $8,395.00"
Console.WriteLine($"D: {integral.ToString("D6", ci)}");          // Displays "D: 008395"
Console.WriteLine($"E: {integral.ToString("E03", ci)}");         // Displays "E: 8.395E+003"
Console.WriteLine($"F: {integral.ToString("F01", ci)}");         // Displays "F: 8395.0"
Console.WriteLine($"G: {integral.ToString("G", ci)}");           // Displays "G: 8395"
Console.WriteLine($"N: {integral.ToString("N01", ci)}");         // Displays "N: 8,395.0"
Console.WriteLine($"P: {(integral/10000.0).ToString("P02", ci)}"); // Displays "P: 83.95 %"
Console.WriteLine($"X: 0x{integral.ToString("X", ci)}");           // Displays "X: 0x20CB"
Console.WriteLine();
Option Strict On

Imports System.Globalization
Imports System.Threading

Module NumericFormats
    Public Sub Main()
        ' Display string representations of numbers for en-us culture
        Dim ci As New CultureInfo("en-us")

        ' Output floating point values
        Dim floating As Double = 10761.937554
        Console.WriteLine("C: {0}", _
                floating.ToString("C", ci))           ' Displays "C: $10,761.94"
        Console.WriteLine("E: {0}", _
                floating.ToString("E03", ci))         ' Displays "E: 1.076E+004"
        Console.WriteLine("F: {0}", _
                floating.ToString("F04", ci))         ' Displays "F: 10761.9376"         
        Console.WriteLine("G: {0}", _
                floating.ToString("G", ci))           ' Displays "G: 10761.937554"
        Console.WriteLine("N: {0}", _
                floating.ToString("N03", ci))         ' Displays "N: 10,761.938"
        Console.WriteLine("P: {0}", _
                (floating / 10000).ToString("P02", ci)) ' Displays "P: 107.62 %"
        Console.WriteLine("R: {0}", _
                floating.ToString("R", ci))           ' Displays "R: 10761.937554"            
        Console.WriteLine()

        ' Output integral values
        Dim integral As Integer = 8395
        Console.WriteLine("C: {0}", _
                integral.ToString("C", ci))           ' Displays "C: $8,395.00"
        Console.WriteLine("D: {0}", _
                integral.ToString("D6"))              ' Displays "D: 008395" 
        Console.WriteLine("E: {0}", _
                integral.ToString("E03", ci))         ' Displays "E: 8.395E+003"
        Console.WriteLine("F: {0}", _
                integral.ToString("F01", ci))         ' Displays "F: 8395.0"    
        Console.WriteLine("G: {0}", _
                integral.ToString("G", ci))           ' Displays "G: 8395"
        Console.WriteLine("N: {0}", _
                integral.ToString("N01", ci))         ' Displays "N: 8,395.0"
        Console.WriteLine("P: {0}", _
                (integral / 10000).ToString("P02", ci)) ' Displays "P: 83.95 %"
        Console.WriteLine("X: 0x{0}", _
                integral.ToString("X", ci))           ' Displays "X: 0x20CB"
        Console.WriteLine()
    End Sub
End Module

こちらもご覧ください