英語で読む

次の方法で共有


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

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

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

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

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

    • .NET Framework と .NET Core 2.0までの .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" 通貨 結果: 通貨値。

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

精度指定子:小数部の桁数。

既定の精度指定子: 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" 小数 結果: 必要に応じて負の符号が付く整数。

サポート:整数型のみ。

精度指定子:最小桁数。

既定の精度指定子:必要な最小桁数。

詳細情報:10 進数 ("D") 書式指定子
1234 ("D")
-> 1234

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

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

精度指定子:小数部の桁数。

既定の精度指定子: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" 固定小数点 結果: 必要に応じて負の符号が付く整数と小数。

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

精度指定子:小数部の桁数。

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

詳細情報:固定小数点 ("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" 番号 結果: 必要に応じて負の符号が付く整数と小数、桁区切り記号、および小数点記号。

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

精度指定子:小数部の桁数。

既定の精度指定子: 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# コンパイラ エラー メッセージが表示されます。

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

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

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

    C#
    decimal value = 123.456m;
    Console.WriteLine($"Your account balance is {value:C2}.");
    // Displays "Your account balance is $123.46."
    

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

    C#
    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
    
  • 挿入文字列の補間式項目の formatString 引数として指定できます。 詳細については、C# リファレンスの 文字列補間 に関する記事、または Visual Basic リファレンスの 補間文字列 記事を参照してください。

以降では、それぞれの標準の数値書式指定文字列について詳しく説明します。

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

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

精度指定子は、変換後の文字列の最小桁数を示します。 必要に応じて、精度指定子によって指定された桁数に達するまで、数値の左側にゼロが埋め込まれます。

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

通貨書式指定子 (C)

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

書式指定される値が指定または既定の小数部の桁数を超えている場合、小数値は結果文字列で丸められます。 指定した小数部の桁数の右側にある値が 5 以上の場合、結果文字列の最後の桁はゼロから離れる方向に丸められます。

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

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

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

C#
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

10 進数書式指定子 (D)

"D" (10 進数) 書式指定子は、0 ~ 9 の数字から成る文字列に数値を変換します。負の数値の場合は、文字列の先頭にマイナス記号が挿入されます。 この書式指定は整数型でだけサポートされています。

精度指定子は、変換後の文字列の最小桁数を示します。 必要に応じて、精度指定子によって指定された桁数に達するまで、数値の左側にゼロが埋め込まれます。 精度指定子が指定されていない場合の既定値は、先行するゼロを含めずに整数を表すために必要な最小値です。

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

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

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

C#
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

指数書式指定子 (E)

指数 ("E") 書式指定子は、"-d.ddd…E+ddd" または "-d.ddd…e+ddd" という形式の文字列に数値を変換します。この "d" は 0 ~ 9 の 1 桁の数字を示します。 負の数値の場合、変換後の文字列の先頭にマイナス記号が挿入されます。 小数点の前には 1 桁の数字が必ず示されます。

精度指定子は、小数部の桁数を示します。 精度指定子を省略すると、小数部の桁数として既定の 6 桁が使用されます。

書式指定子が大文字の場合は指数部の前に "E" が挿入され、小文字の場合は "e" が挿入されます。 指数部は常に、プラス記号またはマイナス記号のいずれかと、3 桁以上の桁で構成されます。 指数部の桁数が最小桁数の 3 桁よりも少ない場合には、3 桁になるようにゼロが埋め込まれます。

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

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

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

C#
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

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

固定小数点 ("F) 書式指定子は、"-ddd.ddd…" という形式の文字列に数値を変換します。この "d" は 0 から 9 の 1 桁の数字を示します。 負の数値の場合、変換後の文字列の先頭にマイナス記号が挿入されます。

精度指定子は、小数部の桁数を示します。 有効桁数指定子を省略した場合、現在の NumberFormatInfo.NumberDecimalDigits プロパティは数値の有効桁数を提供します。

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

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

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

C#
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

一般書式指定子 (G)

一般 ("G") 書式指定子は、数値の型や、精度指定子が指定されているかどうかに応じて、固定小数点表記または指数表記のいずれかのより簡潔な形式に数値を変換します。 精度指定子は、結果文字列の有効桁数の最大値を定義します。 精度指定子が省略されている場合や、0 である場合は、次の表に示すように、数値の型によって既定の精度が決定されます。

数値型 既定の精度
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 指数が正であることを示す文字列を定義します。

次の例では、一般書式指定子を使って、さまざまな浮動小数点値の書式を設定します。

C#
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

数値書式指定子 (N)

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

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

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

次の例では、数値書式指定子を使って、さまざまな浮動小数点値の書式を設定します。

C#
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

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

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

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

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

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

C#
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 %

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

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

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

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

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

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

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

C#
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

重要

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

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

C#
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

16 進書式指定子 (X)

16 進数 ("X") 書式指定子は、16 進数文字列に数値を変換します。 書式指定子の大文字と小文字によって、9 よりも大きい 16 進数値を示すアルファベット文字が大文字と小文字のどちらで表示されるかが決まります。 たとえば、"X" を指定すると "ABCDEF" となり、"x" を指定すると "abcdef" となります。 この書式指定は整数型でだけサポートされています。

精度指定子は、変換後の文字列の最小桁数を示します。 必要に応じて、精度指定子によって指定された桁数に達するまで、数値の左側にゼロが埋め込まれます。

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

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

C#
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

注記

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

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

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

さらに、CultureInfo(String) コンストラクターを使用して、現在のシステム カルチャと同じカルチャを表す新しい CultureInfo オブジェクトをインスタンス化する場合は、コントロール パネルの Regional and Language Options 項目によって確立されたすべてのカスタマイズが新しい 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) を使用しますが、他の数値基本型 (ByteSByteInt16Int32Int64UInt16UInt32UInt64BigIntegerDecimalHalf、および Single) に対しても同様の結果が得られます。

C#
// 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();

こちらもご覧ください