次の方法で共有


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

更新 : 2007 年 11 月

一般的な数値型を書式設定するには、標準の数値書式指定文字列を使用します。標準の数値書式指定文字列は、Axx という形式を使用します。A は書式指定子と呼ばれる英文字、xx は精度指定子と呼ばれるオプションの整数です。精度指定子は 0 ~ 99 の範囲で指定され、結果の桁数に影響します。空白を含む複数の英文字で構成される数値書式指定文字列は、カスタム数値書式指定文字列として解釈されます。

次の表に、標準数値書式指定子の説明および書式指定子ごとのサンプル出力を示します。詳細については、表の後の「メモ」を参照してください。

書式指定子

名前

説明

C または c

通貨

数値は、金額を表す文字列に変換されます。変換は、現在の NumberFormatInfo オブジェクトの通貨書式情報によって制御されます。

精度指定子は、小数部の桁数を示します。精度指定子を省略すると、現在の NumberFormatInfo オブジェクトによって指定される既定の金額桁数が使用されます。

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

D または d

10 進数

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

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

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

E または e

指数

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

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

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

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

F または f

固定小数点

数値は、"-ddd.ddd..." という形式の文字列に変換されます。この 'd' は 0 ~ 9 までの数字を示します。負の数値の場合、変換後の文字列の先頭にマイナス記号が挿入されます。

精度指定子は、小数部の桁数を示します。精度指定子を省略すると、現在の NumberFormatInfo オブジェクトの NumberDecimalDigits プロパティによって指定される既定の桁数が使用されます。

次の例では、固定小数点の書式指定子を使って Double および Int32 値の書式を設定します。

G または g

一般

数値は、数値の型や、精度指定子が指定されているかどうかに応じて、固定小数点表記または指数表記のいずれかの最も簡潔な形式に変換されます。精度指定子が省略されている場合や、0 である場合は、次のリストに示すように、数値の型によって既定の精度が決定されます。

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

上記の規則の例外は、数値が Decimal 型である場合は精度指定子が省略された場合です。この場合は、常に固定小数点表記が使用され、後続のゼロは保持されます。

指数表記が使用される場合、結果の指数部には、書式指定子が 'G' のときには 'E'、書式指定子が 'g' のときには 'e' というプリフィックスが付きます。

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

N または n

数値

数値は、"-d,ddd,ddd.ddd…" という形式の文字列に変換されます。"-" は負数記号を示し (必要な場合)、"d" は数字 (0 ~ 9) を示し、"," は数値グループ間の桁区切り記号を示し、"." は小数点記号を示します。実際の負数のパターン、数値グループのサイズ、桁区切り記号、および小数点記号は、それぞれ、現在の NumberFormatInfo オブジェクトの NumberNegativePatternNumberGroupSizesNumberGroupSeparatorNumberDecimalSeparator の各プロパティによって指定されます。

精度指定子は、小数部の桁数を示します。精度指定子を省略すると、現在の NumberFormatInfo オブジェクトの NumberDecimalDigits プロパティによって指定される既定の桁数が使用されます。

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

P または p

パーセント

数値は、パーセント値を表す文字列に変換されます。この変換は、NumberFormatInfo.PercentNegativePattern プロパティ (数値が負数の場合) または NumberFormatInfo.PercentPositivePattern プロパティ (数値が正数の場合) で定義されます。パーセント値を示すため、変換後の数値に 100 が乗算されます。

精度指定子は、小数部の桁数を示します。精度指定子を省略すると、現在の NumberFormatInfo オブジェクトによって指定される既定の桁数が使用されます。

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

R または r

ラウンドトリップ

この書式指定は、Single 型および Double 型でだけサポートされています。ラウンドトリップ指定子は、数値の変換後の文字列が、変換前の数値へ戻るように解析されることを指定します。この指定子を使用して数値の書式を設定すると、最初に一般書式を使用して数値がテストされます。このとき、Double の場合は 15 桁、Single の場合は 7 桁の空白が使用されます。変換後の文字列を解析して変換前の数値へ戻った場合には、一般書式指定子を使用してこの数値の書式が設定されます。変換後の文字列が解析によって変換前の数値に戻らなかった場合には、Double の場合は 17 桁、Single の場合は 9 桁を使用してこの値の書式が設定されます。

精度指定子は、指定できますが無視されます。ラウンドトリップ指定子と精度指定子の両方を指定すると、ラウンドトリップ指定子が優先されます。

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

X または x

16 進数

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

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

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

その他の 1 文字

(未定義の指定子)

(未定義の指定子は、実行時に FormatException をスローします。)

メモ

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

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

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

NumberFormatInfo のプロパティ

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

整数数値型と浮動小数点数値型

標準の数値書式指定子の記述で、整数数値型または浮動小数点数値型が参照されている場合があります。整数数値型には、ByteSByteInt16Int32Int64UInt16UInt32、および UInt64 があります。浮動小数点数値型には、DecimalSingle、および Double があります。

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

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

次の例では、en-us カルチャおよびすべての標準数値書式指定子を使用して、整数値と浮動小数点数値を書式設定します。このコード例は、2 つの特定の数値型を使用していますが、あらゆる数値基本型に対して同じ結果を生成します (数値基本型とは、ByteSByteInt16Int32Int64UInt16UInt32UInt64DecimalSingle、および Double です)。

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
using System;
using System.Globalization;
using System.Threading;

public class NumericFormats
{
   public static void Main()
   {
      // 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: {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
      int integral = 8395;
      Console.WriteLine("C: {0}", 
              integral.ToString("C", ci));           // Displays "C: $8,395.00"
      Console.WriteLine("D: {0}", 
              integral.ToString("D6", ci));          // 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();
   }
}

参照

概念

数値書式指定文字列

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

参照

NumberFormatInfo

その他の技術情報

型の書式設定