NumberFormatInfo NumberFormatInfo NumberFormatInfo NumberFormatInfo Class

定義

数値を書式設定および解析するためのカルチャ固有の情報を提供します。Provides culture-specific information for formatting and parsing numeric values.

public ref class NumberFormatInfo sealed : ICloneable, IFormatProvider
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class NumberFormatInfo : ICloneable, IFormatProvider
type NumberFormatInfo = class
    interface ICloneable
    interface IFormatProvider
Public NotInheritable Class NumberFormatInfo
Implements ICloneable, IFormatProvider
継承
NumberFormatInfoNumberFormatInfoNumberFormatInfoNumberFormatInfo
属性
実装

次の例は、取得する方法を示します、NumberFormatInfoオブジェクトを対応するCultureInfoオブジェクト、およびクエリの数が特定のカルチャの書式設定情報を取得したオブジェクトを使用します。The following example shows how to retrieve a NumberFormatInfo object for a corresponding CultureInfo object, and use the retrieved object to query number formatting information for the particular culture.

using namespace System;
using namespace System::Globalization;
using namespace System::Text;

int main()
{
    StringBuilder^ builder = gcnew StringBuilder();

    // Loop through all the specific cultures known to the CLR.
    for each(CultureInfo^ culture in 
        CultureInfo::GetCultures (CultureTypes::SpecificCultures)) 
    {
        // Only show the currency symbols for cultures 
        // that speak English.
        if (culture->TwoLetterISOLanguageName == "en")
        {
            // Display the culture name and currency symbol.
            NumberFormatInfo^ numberFormat = culture->NumberFormat;
            builder->AppendFormat("The currency symbol for '{0}'"+
                "is '{1}'",culture->DisplayName,
                numberFormat->CurrencySymbol);
            builder->AppendLine();
        }
    }
    Console::WriteLine(builder);
}

// This code produces the following output.
//
// The currency symbol for 'English (United States)' is '$'
// The currency symbol for 'English (United Kingdom)' is 'Ј'
// The currency symbol for 'English (Australia)' is '$'
// The currency symbol for 'English (Canada)' is '$'
// The currency symbol for 'English (New Zealand)' is '$'
// The currency symbol for 'English (Ireland)' is '?'
// The currency symbol for 'English (South Africa)' is 'R'
// The currency symbol for 'English (Jamaica)' is 'J$'
// The currency symbol for 'English (Caribbean)' is '$'
// The currency symbol for 'English (Belize)' is 'BZ$'
// The currency symbol for 'English (Trinidad and Tobago)' is 'TT$'
// The currency symbol for 'English (Zimbabwe)' is 'Z$'
// The currency symbol for 'English (Republic of the Philippines)' is 'Php'
using System;
using System.Globalization;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        StringBuilder sb = new StringBuilder();

        // Loop through all the specific cultures known to the CLR.
        foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) 
        {
            // Only show the currency symbols for cultures that speak English.
            if (ci.TwoLetterISOLanguageName != "en") continue;
             
            // Display the culture name and currency symbol.
            NumberFormatInfo nfi = ci.NumberFormat;
            sb.AppendFormat("The currency symbol for '{0}' is '{1}'",
                ci.DisplayName, nfi.CurrencySymbol);
            sb.AppendLine();
        }
        Console.WriteLine(sb.ToString());
    }
}

// This code produces the following output.
//
// The currency symbol for 'English (United States)' is '$'
// The currency symbol for 'English (United Kingdom)' is '�'
// The currency symbol for 'English (Australia)' is '$'
// The currency symbol for 'English (Canada)' is '$'
// The currency symbol for 'English (New Zealand)' is '$'
// The currency symbol for 'English (Ireland)' is '?'
// The currency symbol for 'English (South Africa)' is 'R'
// The currency symbol for 'English (Jamaica)' is 'J$'
// The currency symbol for 'English (Caribbean)' is '$'
// The currency symbol for 'English (Belize)' is 'BZ$'
// The currency symbol for 'English (Trinidad and Tobago)' is 'TT$'
// The currency symbol for 'English (Zimbabwe)' is 'Z$'
// The currency symbol for 'English (Republic of the Philippines)' is 'Php'
Imports System.Globalization
Imports System.Text

Public Module Example
   Public Sub Main() 
      Dim sb As New StringBuilder()

      ' Loop through all the specific cultures known to the CLR.
      For Each ci In CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
         ' Only show the currency symbols for cultures that speak English.
         If ci.TwoLetterISOLanguageName <> "en" Then Continue For

         ' Display the culture name and currency symbol.
         Dim nfi As NumberFormatInfo = ci.NumberFormat
         sb.AppendFormat("The currency symbol for '{0}' is '{1}'",
                         ci.DisplayName, nfi.CurrencySymbol)
         sb.AppendLine()
      Next
      Console.WriteLine(sb.ToString())
   End Sub
End Module
' The example displays output like the following:
'       The currency symbol for 'English (United States)' is '$'
'       The currency symbol for 'English (United Kingdom)' is '�'
'       The currency symbol for 'English (Australia)' is '$'
'       The currency symbol for 'English (Canada)' is '$'
'       The currency symbol for 'English (New Zealand)' is '$'
'       The currency symbol for 'English (Ireland)' is '?'
'       The currency symbol for 'English (South Africa)' is 'R'
'       The currency symbol for 'English (Jamaica)' is 'J$'
'       The currency symbol for 'English (Caribbean)' is '$'
'       The currency symbol for 'English (Belize)' is 'BZ$'
'       The currency symbol for 'English (Trinidad and Tobago)' is 'TT$'
'       The currency symbol for 'English (Zimbabwe)' is 'Z$'
'       The currency symbol for 'English (Republic of the Philippines)' is 'Php'
'       The currency symbol for 'English (India)' is 'Rs.'
'       The currency symbol for 'English (Malaysia)' is 'RM'
'       The currency symbol for 'English (Singapore)' is '$'

注釈

NumberFormatInfoクラスには、書式設定や数値の値を解析する際に使用されるカルチャ固有の情報が含まれています。The NumberFormatInfo class contains culture-specific information that is used when you format and parse numeric values. この情報には、通貨記号、小数点の記号、桁区切り記号、および正と負の記号のシンボルが含まれています。This information includes the currency symbol, the decimal symbol, the group separator symbol, and the symbols for positive and negative signs.

NumberFormatInfo オブジェクトをインスタンス化します。Instantiating a NumberFormatInfo object

インスタンス化することができます、NumberFormatInfo現在のカルチャ、インバリアント カルチャ、特定のカルチャまたはニュートラル カルチャの書式指定規則を表すオブジェクト。You can instantiate a NumberFormatInfo object that represents the formatting conventions of the current culture, the invariant culture, a specific culture, or a neutral culture.

現在のカルチャの NumberFormatInfo オブジェクトをインスタンス化します。Instantiating a NumberFormatInfo object for the current culture

インスタンス化することができます、NumberFormatInfoの次の方法のいずれかで現在のスレッド カルチャ オブジェクト。You can instantiate a NumberFormatInfo object for the current thread culture in any of the following ways. 返された各ケースでNumberFormatInfoオブジェクトは読み取り専用です。In each case, the returned NumberFormatInfo object is read-only.

次のコードの例では、これら 3 つの方法を作成するNumberFormatInfo現在のカルチャの書式指定規則を表すオブジェクト。The following example uses these three ways to create NumberFormatInfo objects that represent the formatting conventions of the current culture. 値を取得、IsReadOnlyプロパティを各オブジェクトは読み取り専用のことを示しています。It also retrieves the value of the IsReadOnly property to illustrate that each object is read-only.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo current1 = CultureInfo.CurrentCulture.NumberFormat;
      Console.WriteLine(current1.IsReadOnly);
      
      NumberFormatInfo current2 = NumberFormatInfo.CurrentInfo;
      Console.WriteLine(current2.IsReadOnly);
      
      NumberFormatInfo current3 = NumberFormatInfo.GetInstance(CultureInfo.CurrentCulture);
      Console.WriteLine(current3.IsReadOnly);
   }
}
// The example displays the following output:
//       True
//       True
//       True
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim current1 As NumberFormatInfo = CultureInfo.CurrentCulture.NumberFormat
      Console.WriteLine(current1.IsReadOnly)
      
      Dim current2 As NumberFormatInfo = NumberFormatInfo.CurrentInfo
      Console.WriteLine(current2.IsReadOnly)
      
      Dim current3 As NumberFormatInfo = NumberFormatInfo.GetInstance(CultureInfo.CurrentCulture)
      Console.WriteLine(current3.IsReadOnly)
   End Sub
End Module
' The example displays the following output:
'       True
'       True
'       True

書き込み可能なを作成するNumberFormatInfo次の方法のいずれかで現在のスレッド カルチャの規則を表すオブジェクト。You can create a writable NumberFormatInfo object that represents the conventions of the current thread culture in any of the following ways:

次の例では、これら 2 つのインスタンス化する方法を示しています、NumberFormatInfoオブジェクトし、の値を表示、IsReadOnlyプロパティをオブジェクトが読み取り専用でがないことを示しています。The following example illustrates these two ways of instantiating a NumberFormatInfo object, and displays the value of its IsReadOnly property to illustrate that the object is not read-only.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo current1 = NumberFormatInfo.CurrentInfo;
      current1 = (NumberFormatInfo) current1.Clone();
      Console.WriteLine(current1.IsReadOnly);

      CultureInfo culture2 = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
      NumberFormatInfo current2 = culture2.NumberFormat;
      Console.WriteLine(current2.IsReadOnly);
   }
}
// The example displays the following output:
//       False
//       False
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim current1 As NumberFormatInfo = NumberFormatInfo.CurrentInfo
      current1 = CType(current1.Clone(), NumberFormatInfo)
      Console.WriteLine(current1.IsReadOnly)

      Dim culture2 As CultureInfo = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name)
      Dim current2 As NumberFormatInfo = culture2.NumberFormat
      Console.WriteLine(current2.IsReadOnly)
   End Sub
End Module
' The example displays the following output:
'       False
'       False

Windows オペレーティング システムでは、ユーザーの一部をオーバーライドすることに注意してください、NumberFormatInfoプロパティ値が数値の書式設定と解析を通じて操作で使用される、地域と言語コントロール パネルの項目。Note that the Windows operating system allows the user to override some of the NumberFormatInfo property values used in numeric formatting and parsing operations through the Region and Language item in Control Panel. たとえば、カルチャが英語 (米国) は、ユーザーは、通貨値をドル 1.1 の既定ではなく 1.1 (米ドル) として表示こともできます。For example, a user whose culture is English (United States) might choose to display currency values as 1.1 USD instead of the default of $1.1. NumberFormatInfo説明した方法で取得したオブジェクト以前すべて反映これらのユーザー上書きします。The NumberFormatInfo objects retrieved in the ways discussed previously all reflect these user overrides. これが望ましくない場合は作成できます、NumberFormatInfoユーザー オーバーライドを反映していないオブジェクト (読み取り/書き込みではまた、読み取り専用ではなく) を呼び出して、CultureInfo.CultureInfo(String, Boolean)コンス トラクターとの値を提供するfalseuseUserOverride引数。If this is undesirable, you can create a NumberFormatInfo object that does not reflect user overrides (and that is also read/write rather than read-only) by calling the CultureInfo.CultureInfo(String, Boolean) constructor and supplying a value of false for the useUserOverride argument. 次の例は、現在のカルチャが英語 (米国) とが通貨記号が米国ドルに $ の既定値から変更されましたの図をシステムを提供します。The following example provides an illustration for a system whose current culture is English (United States) and whose currency symbol has been changed from the default of $ to USD.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture;
      NumberFormatInfo nfi;
      
      culture = CultureInfo.CurrentCulture;
      nfi = culture.NumberFormat;
      Console.WriteLine("Culture Name:    {0}", culture.Name);
      Console.WriteLine("User Overrides:  {0}", culture.UseUserOverride);
      Console.WriteLine("Currency Symbol: {0}\n", culture.NumberFormat.CurrencySymbol);
            
      culture = new CultureInfo(CultureInfo.CurrentCulture.Name, false);
      Console.WriteLine("Culture Name:    {0}", culture.Name);
      Console.WriteLine("User Overrides:  {0}", culture.UseUserOverride);
      Console.WriteLine("Currency Symbol: {0}", culture.NumberFormat.CurrencySymbol);
   }
}
// The example displays the following output:
//       Culture Name:    en-US
//       User Overrides:  True
//       Currency Symbol: USD
//       
//       Culture Name:    en-US
//       User Overrides:  False
//       Currency Symbol: $
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim culture As CultureInfo
      Dim nfi As NumberFormatInfo
      
      culture = CultureInfo.CurrentCulture
      nfi = culture.NumberFormat
      Console.WriteLine("Culture Name:    {0}", culture.Name)
      Console.WriteLine("User Overrides:  {0}", culture.UseUserOverride)
      Console.WriteLine("Currency Symbol: {0}", culture.NumberFormat.CurrencySymbol)
      Console.WriteLine()
            
      culture = New CultureInfo(CultureInfo.CurrentCulture.Name, False)
      Console.WriteLine("Culture Name:    {0}", culture.Name)
      Console.WriteLine("User Overrides:  {0}", culture.UseUserOverride)
      Console.WriteLine("Currency Symbol: {0}", culture.NumberFormat.CurrencySymbol)
   End Sub
End Module
' The example displays the following output:
'       Culture Name:    en-US
'       User Overrides:  True
'       Currency Symbol: USD
'       
'       Culture Name:    en-US
'       User Overrides:  False
'       Currency Symbol: $

場合、CultureInfo.UseUserOverrideプロパティに設定されてtrue、プロパティCultureInfo.DateTimeFormatCultureInfo.NumberFormat、およびCultureInfo.TextInfoものユーザー設定から取得されます。If the CultureInfo.UseUserOverride property is set to true, the properties CultureInfo.DateTimeFormat, CultureInfo.NumberFormat, and CultureInfo.TextInfo are also retrieved from the user settings. ユーザー設定が関連付けられているカルチャと互換性がないかどうか、CultureInfoオブジェクト (選択したカレンダーでないごとに一覧表示の予定表のいずれかの場合など、OptionalCalendarsプロパティ)、メソッドの結果と、プロパティの値は、定義されていません。If the user settings are incompatible with the culture associated with the CultureInfo object (for example, if the selected calendar is not one of the calendars listed by the OptionalCalendars property), the results of the methods and the values of the properties are undefined.

インバリアント カルチャの NumberFormatInfo オブジェクトをインスタンス化します。Instantiating a NumberFormatInfo object for the invariant culture

インバリアント カルチャでは、カルチャに依存しないられるカルチャを表します。The invariant culture represents a culture that is culture-insensitive. すべて特定英語圏の国/地域ではなく、英語の言語に基づいています。It is based on the English language but not on any specific English-speaking country/region. 特定のカルチャのデータは、動的であっても、新しいカルチャの規則やユーザー設定を反映するように変更することができます、インバリアント カルチャのデータは変わりません。Although the data of specific cultures can be dynamic and can change to reflect new cultural conventions or user preferences, the data of the invariant culture does not change. ANumberFormatInfoカルチャで書式設定操作の結果文字列は異なる必要がありますいないをインバリアント カルチャの書式指定規則を表すオブジェクトを使用できます。A NumberFormatInfo object that represents the formatting conventions of the invariant culture can be used for formatting operations in which result strings should not vary by culture.

インスタンス化することができます、NumberFormatInfo次の方法でインバリアント カルチャの書式指定規則を表すオブジェクト。You can instantiate a NumberFormatInfo object that represents the formatting conventions of the invariant culture in the following ways:

次の例がこれらの各メソッドをインスタンス化するには、NumberFormatInfoインバリアント カルチャを表すオブジェクト。The following example uses each of these methods to instantiate a NumberFormatInfo object that represents the invariant culture. オブジェクトが読み取り専用であるかどうかを示しますIt then indicates whether the object is read-only,

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo nfi;
      
      nfi = System.Globalization.NumberFormatInfo.InvariantInfo;
      Console.WriteLine(nfi.IsReadOnly);               
      
      nfi = CultureInfo.InvariantCulture.NumberFormat;
      Console.WriteLine(nfi.IsReadOnly);               
      
      nfi = New NumberFormatInfo();
      Console.WriteLine(nfi.IsReadOnly);               
   }
}
// The example displays the following output:
//       True
//       True
//       False
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim nfi As NumberFormatInfo
      
      nfi = System.Globalization.NumberFormatInfo.InvariantInfo
      Console.WriteLine(nfi.IsReadOnly)               
      
      nfi = CultureInfo.InvariantCulture.NumberFormat
      Console.WriteLine(nfi.IsReadOnly)               
      
      nfi = New NumberFormatInfo()
      Console.WriteLine(nfi.IsReadOnly)               
   End Sub
End Module
' The example displays the following output:
'       True
'       True
'       False

特定のカルチャの NumberFormatInfo オブジェクトをインスタンス化します。Instantiating a NumberFormatInfo object for a specific culture

特定のカルチャでは、特定の国/地域で話されている言語を表します。A specific culture represents a language that is spoken in a particular country/region. たとえば、EN-US では、米国で話される英語の言語を表す特定のカルチャと EN-CA はカナダで話される英語の言語を表す特定のカルチャ。For example, en-US is a specific culture that represents the English language spoken in the United States, and en-CA is a specific culture that represents the English language spoken in Canada. インスタンス化することができます、NumberFormatInfo次の方法で、特定のカルチャの書式指定規則を表すオブジェクト。You can instantiate a NumberFormatInfo object that represents the formatting conventions of a specific culture in the following ways:

次のコードの例では、これら 4 つの方法を作成する、NumberFormatInfoインドネシア語 (インドネシア) カルチャの書式指定規則を反映するオブジェクト。The following example uses these four ways to create a NumberFormatInfo object that reflects the formatting conventions of the Indonesian (Indonesia) culture. また、各オブジェクトは読み取り専用かどうかを示します。It also indicates whether each object is read-only.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture;
      NumberFormatInfo nfi;
      
      nfi = CultureInfo.GetCultureInfo("id-ID").NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);
      
      culture = new CultureInfo("id-ID");
      nfi = NumberFormatInfo.GetInstance(culture);
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);
      
      culture = CultureInfo.CreateSpecificCulture("id-ID");
      nfi = culture.NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);
      
      culture = new CultureInfo("id-ID");
      nfi = culture.NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);
   }
}
// The example displays the following output:
//       Read-only: True
//       Read-only: False
//       Read-only: False
//       Read-only: False
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim culture As CultureInfo
      Dim nfi As NumberFormatInfo
      
      nfi = CultureInfo.GetCultureInfo("id-ID").NumberFormat
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly)
      
      culture = New CultureInfo("id-ID")
      nfi = NumberFormatInfo.GetInstance(culture)
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly)
      
      culture = CultureInfo.CreateSpecificCulture("id-ID")
      nfi = culture.NumberFormat
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly)
      
      culture = New CultureInfo("id-ID")
      nfi = culture.NumberFormat
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly)
   End Sub
End Module
' The example displays the following output:
'       Read-only: True
'       Read-only: False
'       Read-only: False
'       Read-only: False

ニュートラル カルチャの NumberFormatInfo オブジェクトをインスタンス化します。Instantiating a NumberFormatInfo object for a neutral culture

ニュートラル カルチャでは、カルチャまたは言語、国/地域の独立したを表します。A neutral culture represents a culture or language that is independent of a country/region. 通常は 1 つまたは複数の特定のカルチャの親です。It is typically the parent of one or more specific cultures. たとえば、fr は、フランス語の言語と、FR-FR カルチャの親のニュートラル カルチャです。For example, fr is a neutral culture for the French language and the parent of the fr-FR culture. 作成する、NumberFormatInfoを作成するのと同様に、ニュートラル カルチャの書式指定規則を表すオブジェクトをNumberFormatInfo特定のカルチャの書式指定規則を表すオブジェクト。You create a NumberFormatInfo object that represents the formatting conventions of a neutral culture in the same way that you create a NumberFormatInfo object that represents the formatting conventions of a specific culture.

注意

.NET Framework 3.5.NET Framework 3.5取得しようとしています。 以前のバージョン、NumberFormatInfoニュートラル カルチャの書式指定規則を反映するオブジェクトをスロー、NotSupportedException例外。In the .NET Framework 3.5.NET Framework 3.5 and earlier versions, trying to retrieve a NumberFormatInfo object that reflects the formatting conventions of a neutral culture throws a NotSupportedException exception.

ただし、特定の国/リージョンに依存しないため、ニュートラル カルチャにカルチャ固有の書式情報が不足しています。However, because it is independent of a specific country/region, a neutral culture lacks culture-specific formatting information. 設定ではなく、NumberFormatInfoジェネリックの値を持つオブジェクトに、.NET Framework が返す、NumberFormatInfoニュートラル カルチャの子である、特定の書式指定規則のカルチャを反映するオブジェクト。Rather than populating the NumberFormatInfo object with generic values, the .NET Framework returns a NumberFormatInfo object that reflects the formatting conventions of a specific culture that is a child of the neutral culture. たとえば、 NumberFormatInfo en のニュートラル カルチャは EN-US カルチャの書式指定規則を反映するためのオブジェクトとNumberFormatInfofr カルチャ、FR-FR カルチャの書式設定規則を反映するためのオブジェクトします。For example, the NumberFormatInfo object for the neutral en culture reflects the formatting conventions of the en-US culture, and the NumberFormatInfo object for the fr culture reflects the formatting conventions of the fr-FR culture.

次のようなコードを使用すると、各ニュートラル カルチャを表すどの特定のカルチャの書式指定規則を決定します。You can use code like the following to determine which specific culture's formatting conventions each neutral culture represents.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      // Get all the neutral cultures
      List<String> names = new List<String>();
      Array.ForEach(CultureInfo.GetCultures(CultureTypes.NeutralCultures),
                    culture => names.Add(culture.Name));
      names.Sort();
      foreach (var name in names) {
         // Ignore the invariant culture.
         if (name == "") continue;
         
         ListSimilarChildCultures(name);        
      }
   }

   private static void ListSimilarChildCultures(string name)
   { 
      // Create the neutral NumberFormatInfo object.
      NumberFormatInfo nfi = CultureInfo.GetCultureInfo(name).NumberFormat;
      // Retrieve all specific cultures of the neutral culture.
      CultureInfo[] cultures = Array.FindAll(CultureInfo.GetCultures(CultureTypes.SpecificCultures), 
                               culture => culture.Name.StartsWith(name + "-", StringComparison.OrdinalIgnoreCase));
      // Create an array of NumberFormatInfo properties
      PropertyInfo[] properties = typeof(NumberFormatInfo).GetProperties(BindingFlags.Instance | BindingFlags.Public);
      bool hasOneMatch = false;

      foreach (var ci in cultures) {
         bool match = true;     
         // Get the NumberFormatInfo for a specific culture.
         NumberFormatInfo specificNfi = ci.NumberFormat;
         // Compare the property values of the two.
         foreach (var prop in properties) {
            // We're not interested in the value of IsReadOnly.     
            if (prop.Name == "IsReadOnly") continue;
            
            // For arrays, iterate the individual elements to see if they are the same.
            if (prop.PropertyType.IsArray) { 
               IList nList = (IList) prop.GetValue(nfi, null);
               IList sList = (IList) prop.GetValue(specificNfi, null);
               if (nList.Count != sList.Count) {
                  match = false;
                  break;
               } 

               for (int ctr = 0; ctr < nList.Count; ctr++) {
                  if (! nList[ctr].Equals(sList[ctr])) {
                     match = false;
                     break;
                  }     
               }
            }   
            else if (! prop.GetValue(specificNfi).Equals(prop.GetValue(nfi))) {
               match = false;
               break;   
            }        
         }
         if (match) {
            Console.WriteLine("NumberFormatInfo object for '{0}' matches '{1}'", 
                                      name, ci.Name);
            hasOneMatch = true;
         }                                       
      }
      if (! hasOneMatch)
         Console.WriteLine("NumberFormatInfo object for '{0}' --> No Match", name);            

      Console.WriteLine();
   }
}
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Reflection

Module Example
   Public Sub Main()
      ' Get all the neutral cultures
      Dim names As New List(Of String)
      Array.ForEach(CultureInfo.GetCultures(CultureTypes.NeutralCultures),
                    Sub(culture) names.Add(culture.Name))
      names.Sort()
      For Each name In names
         ' Ignore the invariant culture.
         If name = "" Then Continue For
         
         ListSimilarChildCultures(name)        
      Next
   End Sub

   Private Sub ListSimilarChildCultures(name As String)
      ' Create the neutral NumberFormatInfo object.
      Dim nfi As NumberFormatInfo = CultureInfo.GetCultureInfo(name).NumberFormat
      ' Retrieve all specific cultures of the neutral culture.
      Dim cultures() As CultureInfo = Array.FindAll(CultureInfo.GetCultures(CultureTypes.SpecificCultures), 
                               Function(culture) culture.Name.StartsWith(name + "-", StringComparison.OrdinalIgnoreCase))
      ' Create an array of NumberFormatInfo properties
      Dim properties() As PropertyInfo = GetType(NumberFormatInfo).GetProperties(BindingFlags.Instance Or BindingFlags.Public)
      Dim hasOneMatch As Boolean = False

      For Each ci In cultures
         Dim match As Boolean = True     
         ' Get the NumberFormatInfo for a specific culture.
         Dim specificNfi As NumberFormatInfo = ci.NumberFormat
         ' Compare the property values of the two.
         For Each prop In properties
            ' We're not interested in the value of IsReadOnly.     
            If prop.Name = "IsReadOnly" Then Continue For
            
            ' For arrays, iterate the individual elements to see if they are the same.
            If prop.PropertyType.IsArray Then 
               Dim nList As IList = CType(prop.GetValue(nfi, Nothing), IList)
               Dim sList As IList = CType(prop.GetValue(specificNfi, Nothing), IList)
               If nList.Count <> sList.Count Then
                  match = false
                  Exit For
               End If 

               For ctr As Integer = 0 To nList.Count - 1
                  If Not nList(ctr).Equals(sList(ctr)) 
                     match = false
                     Exit For
                  End If     
               Next
            Else If Not prop.GetValue(specificNfi).Equals(prop.GetValue(nfi))
               match = false
               Exit For   
            End If        
         Next
         If match Then
            Console.WriteLine("NumberFormatInfo object for '{0}' matches '{1}'", 
                                      name, ci.Name)
            hasOneMatch = true
         End If                                       
      Next
      If Not hasOneMatch Then
         Console.WriteLine("NumberFormatInfo object for '{0}' --> No Match", name)            
      End If
      
      Console.WriteLine()
   End Sub
End Module

NumberFormatInfo と動的データNumberFormatInfo and dynamic data

カルチャに固有のデータによって提供される数値の書式設定をNumberFormatInfoクラスは動的で提供されるカルチャのデータと同様に、CultureInfoクラス。The culture-specific data for formatting numeric values provided by the NumberFormatInfo class is dynamic, just like the cultural data provided by the CultureInfo class. 値の安定性に関する想定をする必要がありますいないNumberFormatInfoオブジェクトが関連付けられている特定CultureInfoオブジェクト。You should not make any assumptions about the stability of values for NumberFormatInfo objects that are associated with particular CultureInfo objects. インバリアント カルチャとそれに関連付けられたによって提供されるデータのみNumberFormatInfoオブジェクトは安定しています。Only the data provided by the invariant culture and its associated NumberFormatInfo object is stable. アプリケーションのセッション間で、または、次の理由の 1 つのセッション内であっても、その他のデータを変更できます。Other data can change between application sessions, or even within a single session, for the following reasons:

  • システムの更新プログラム。System updates. 通貨記号、通貨の書式などのカルチャの設定は、時間の経過と共に変更します。Cultural preferences such as the currency symbol or currency formats change over time. Windows 更新プログラムにはへの変更が含まれています、これが発生したとき、NumberFormatInfo特定のカルチャのプロパティの値。When this happens, Windows Update includes changes to the NumberFormatInfo property value for a particular culture.

  • 置換カルチャ。Replacement cultures. CultureAndRegionInfoBuilder既存のカルチャのデータを置換するクラスを使用できます。The CultureAndRegionInfoBuilder class can be used to replace the data of an existing culture.

  • プロパティ値に対する変更を連鎖します。Cascading changes to property values. これにより、実行時にさまざまなカルチャ関連のプロパティを変更できますNumberFormatInfoデータを変更します。A number of culture-related properties can change at run time, which, in turn, causes NumberFormatInfo data to change. たとえば、プログラム、またはユーザーの操作によっては、現在のカルチャを変更できます。For example, the current culture can be changed either programmatically or through user action. このような場合、NumberFormatInfoによって返されるオブジェクト、CurrentInfoプロパティは、現在のカルチャに関連付けられているオブジェクトに変更します。When this happens, the NumberFormatInfo object returned by the CurrentInfo property changes to an object associated with the current culture.

  • ユーザー設定。User preferences. アプリケーションのユーザーには、コントロール パネルの 地域と言語のオプションを使って現在のシステム カルチャに関連付けられている値の一部をオーバーライド可能性があります。Users of your application might override some of the values associated with the current system culture through the region and language options in Control Panel. たとえば、ユーザーは、さまざまな通貨記号、または別の 10 進区切り記号選択可能性があります。For example, users might choose a different currency symbol or a different decimal separator symbol. 場合、CultureInfo.UseUserOverrideプロパティに設定されてtrue(既定値) のプロパティ、NumberFormatInfoオブジェクトは、ユーザーの設定からも取得されます。If the CultureInfo.UseUserOverride property is set to true (its default value), the properties of the NumberFormatInfo object are also retrieved from the user settings.

すべてのユーザー オーバーライド可能なプロパティ、.NET Framework 2.0 以降で、NumberFormatInfoオブジェクトは、オブジェクトの作成時に初期化されます。Starting with the .NET Framework 2.0, all user-overridable properties of a NumberFormatInfo object are initialized when the object is created. 可能性があるが、不整合のため、どちらもオブジェクトの作成やユーザー オーバーライドのプロセスがアトミックで、オブジェクトの作成中に、関連する値を変更することがあります。There is still a possibility of inconsistency, because neither object creation nor the user override process is atomic, and the relevant values may change during object creation. ただし、これらの不整合が非常にまれなはずです。However, these inconsistencies should be extremely rare.

ユーザー オーバーライドを反映するかどうかを制御するNumberFormatInfo現在のスレッド カルチャと同じカルチャを表すオブジェクト。You can control whether user overrides are reflected in NumberFormatInfo objects that represent the same culture as the current thread culture. 次の表に、方法、NumberFormatInfoオブジェクトを取得して、結果のオブジェクトがユーザー オーバーライドを反映するかどうかを示します。The following table lists the ways in which a NumberFormatInfo object can be retrieved and indicates whether the resulting object reflects user overrides.

CultureInfo と NumberFormatInfo オブジェクトのソースSource of CultureInfo and NumberFormatInfo object ユーザー オーバーライドが反映されます。Reflects user overrides
CultureInfo.CurrentCulture.NumberFormat プロパティCultureInfo.CurrentCulture.NumberFormat property [はい]Yes
NumberFormatInfo.CurrentInfo プロパティNumberFormatInfo.CurrentInfo property はいYes
CultureInfo.CreateSpecificCulture メソッドCultureInfo.CreateSpecificCulture method [はい]Yes
CultureInfo.GetCultureInfo メソッドCultureInfo.GetCultureInfo method ×No
CultureInfo(String) コンストラクターCultureInfo(String) constructor はいYes
CultureInfo.CultureInfo(String, Boolean) コンストラクターCultureInfo.CultureInfo(String, Boolean) constructor 値に依存useUserOverrideパラメーターDepends on value of useUserOverride parameter

使用する場合、ユーザー オーバーライドを尊重する必要がありますそれ以外の場合は特別な理由がある場合を除き、NumberFormatInfoを書式設定し、ユーザー入力を解析または数値データを表示するクライアント アプリケーション内のオブジェクト。Unless there is a compelling reason to do otherwise, you should respect user overrides when you use the NumberFormatInfo object in client applications to format and parse user input or to display numeric data. サーバー アプリケーションまたは自動アプリケーションの場合は、ユーザー オーバーライドを使用する必要があります。For server applications or unattended applications, you should not respect user overrides. ただし、使用する場合、NumberFormatInfoいずれかのオブジェクトを明示的または暗黙的に文字列の形式で数値データを保持するには、するには使用するか、NumberFormatInfoインバリアント カルチャの書式設定規則を反映するオブジェクトを指定する必要があります、カルチャに関係なく使用するカスタム数値書式指定文字列。However, if you are using the NumberFormatInfo object either explicitly or implicitly to persist numeric data in string form, you should either use a NumberFormatInfo object that reflects the formatting conventions of the invariant culture, or you should specify a custom numeric format string that you use regardless of culture.

IFormatProvider、NumberFormatInfo、および数値の書式設定IFormatProvider, NumberFormatInfo, and numeric formatting

ANumberFormatInfoオブジェクトがすべての数値を書式設定操作の暗黙的または明示的に使用されます。A NumberFormatInfo object is used implicitly or explicitly in all numeric formatting operations. 次のメソッドの呼び出しが含まれます。These include calls to the following methods:

すべての数値書式設定操作の使用、IFormatProvider実装します。All numeric formatting operations make use of an IFormatProvider implementation. IFormatProviderインターフェイスには、1 つのメソッドが含まれています。GetFormat(Type)します。The IFormatProvider interface includes a single method, GetFormat(Type). これは、渡されるコールバック メソッド、Type書式設定情報を提供するために必要な型を表すオブジェクト。This is a callback method that is passed a Type object that represents the type needed to provide formatting information. その型のインスタンスを返すため、このメソッドはまたはnull型のインスタンスを提供できない場合、します。The method is responsible for returning either an instance of that type or null, if it cannot provide an instance of the type. .NET Framework には 2 つIFormatProvider数値の書式設定の実装。The .NET Framework provides two IFormatProvider implementations for formatting numbers:

場合、IFormatProvider実装が指定されていない書式設定メソッドを明示的に、CultureInfoによって返されるオブジェクト、CultureInfo.CurrentCulture現在のスレッド カルチャを表すプロパティを使用します。If an IFormatProvider implementation is not provided to a formatting method explicitly, a CultureInfo object returned by the CultureInfo.CurrentCulture property that represents the current thread culture is used.

次の例の間のリレーションシップを示しています、IFormatProviderインターフェイスとNumberFormatInfoカスタムを定義することで、書式設定操作でクラスIFormatProvider実装します。The following example illustrates the relationship between the IFormatProvider interface and the NumberFormatInfo class in formatting operations by defining a custom IFormatProvider implementation. そのGetFormatメソッドは、書式設定操作によって要求されたオブジェクトの型名を表示します。Its GetFormat method displays the type name of the object requested by the formatting operation. インターフェイスが要求している場合、NumberFormatInfoオブジェクト、この方法では、NumberFormatInfoの現在のスレッド カルチャ オブジェクト。If the interface is requesting a NumberFormatInfo object, this method provides the NumberFormatInfo object for the current thread culture. 例を示しますから出力として、Decimal.ToString(IFormatProvider)メソッド要求をNumberFormatInfoオブジェクトを書式設定情報を提供する、String.Format(IFormatProvider, String, Object[])メソッド要求NumberFormatInfoDateTimeFormatInfoオブジェクトだけでなく、 ICustomFormatter実装です。As the output from the example shows, the Decimal.ToString(IFormatProvider) method requests a NumberFormatInfo object to provide formatting information, whereas the String.Format(IFormatProvider, String, Object[]) method requests NumberFormatInfo and DateTimeFormatInfo objects as well as an ICustomFormatter implementation.

using System;
using System.Globalization;

public class CurrentCultureFormatProvider : IFormatProvider
{
   public Object GetFormat(Type formatType) 
   {
      Console.WriteLine("Requesting an object of type {0}", 
                        formatType.Name);
      if (formatType == typeof(NumberFormatInfo))
         return NumberFormatInfo.CurrentInfo;
      else if (formatType == typeof(DateTimeFormatInfo))
         return DateTimeFormatInfo.CurrentInfo;
      else
         return null;
   }
}

public class Example
{
   public static void Main()
   {
      Decimal amount = 1203.541m;
      string value = amount.ToString("C2", new CurrentCultureFormatProvider());
      Console.WriteLine(value);
      Console.WriteLine();
      string composite = String.Format(new CurrentCultureFormatProvider(), 
                                       "Date: {0}   Amount: {1}   Description: {2}",
                                       DateTime.Now, 1264.03m, "Service Charge");
      Console.WriteLine(composite);
      Console.WriteLine();
   }
}
// The example displays output like the following:
//    Requesting an object of type NumberFormatInfo
//    $1,203.54
//    
//    Requesting an object of type ICustomFormatter
//    Requesting an object of type DateTimeFormatInfo
//    Requesting an object of type NumberFormatInfo
//    Date: 11/15/2012 2:00:01 PM   Amount: 1264.03   Description: Service Charge
Imports System.Globalization

Public Class CurrentCultureFormatProvider : Implements IFormatProvider
   Public Function GetFormat(formatType As Type) As Object _
                   Implements IFormatProvider.GetFormat
      Console.WriteLine("Requesting an object of type {0}", 
                        formatType.Name)
      If formatType Is GetType(NumberFormatInfo) Then
         Return NumberFormatInfo.CurrentInfo
      Else If formatType Is GetType(DateTimeFormatInfo) Then
         Return DateTimeFormatInfo.CurrentInfo
      Else
         Return Nothing
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim amount As Decimal = 1203.541d
      Dim value As String = amount.ToString("C2", New CurrentCultureFormatProvider())
      Console.WriteLine(value)
      Console.WriteLine()
      Dim composite As String = String.Format(New CurrentCultureFormatProvider, 
                                              "Date: {0}   Amount: {1}   Description: {2}",
                                              Date.Now, 1264.03d, "Service Charge")
      Console.WriteLine(composite)
      Console.WriteLine()
   End Sub
End Module
' The example displays output like the following:
'    Requesting an object of type NumberFormatInfo
'    $1,203.54
'    
'    Requesting an object of type ICustomFormatter
'    Requesting an object of type DateTimeFormatInfo
'    Requesting an object of type NumberFormatInfo
'    Date: 11/15/2012 2:00:01 PM   Amount: 1264.03   Description: Service Charge

場合、IFormatProvider実装がメソッドの呼び出し、メソッド呼び出しの書式指定で明示的に指定されていない、CultureInfo.CurrentCulture.GetFormatを返すメソッド、NumberFormatInfo現在のスレッド カルチャに対応するオブジェクト。If an IFormatProvider implementation is not explicitly provided in a numeric formatting method call, the method calls the CultureInfo.CurrentCulture.GetFormat method, which returns the NumberFormatInfo object that corresponds to the current thread culture.

NumberFormatInfo のプロパティおよび書式指定文字列Format strings and NumberFormatInfo properties

すべての書式設定操作では、結果の文字列数値からを生成するために、標準またはカスタム数値書式指定文字列を使用します。Every formatting operation uses either a standard or a custom numeric format string to produce a result string from a number. 場合によっては、結果の文字列を生成するために書式設定文字列の使用は、次の例のように、明示的なは。In some cases, the use of a format string to produce a result string is explicit, as in the following example. このコードは、Decimal.ToString(IFormatProvider)に変換するメソッド、Decimal値を EN-US カルチャの書式設定規則を使用して別の文字列表現。This code calls the Decimal.ToString(IFormatProvider) method to convert a Decimal value to a number of different string representations by using the formatting conventions of the en-US culture.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formatStrings = { "C2", "E1", "F", "G3", "N", 
                                 "#,##0.000", "0,000,000,000.0##" };
      CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
      Decimal[] values = { 1345.6538m, 1921651.16m };
      
      foreach (var value in values) {
         foreach (var formatString in formatStrings) {
            string resultString = value.ToString(formatString, culture);
            Console.WriteLine("{0,-18} -->  {1}", formatString, resultString);
         }
         Console.WriteLine();      
      }   
   }
}
// The example displays the following output:
//       C2                 -->  $1,345.65
//       E1                 -->  1.3E+003
//       F                  -->  1345.65
//       G3                 -->  1.35E+03
//       N                  -->  1,345.65
//       #,##0.000          -->  1,345.654
//       0,000,000,000.0##  -->  0,000,001,345.654
//       
//       C2                 -->  $1,921,651.16
//       E1                 -->  1.9E+006
//       F                  -->  1921651.16
//       G3                 -->  1.92E+06
//       N                  -->  1,921,651.16
//       #,##0.000          -->  1,921,651.160
//       0,000,000,000.0##  -->  0,001,921,651.16
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim formatStrings() As String = { "C2", "E1", "F", "G3", "N", 
                                        "#,##0.000", "0,000,000,000.0##" }
      Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim values() As Decimal = { 1345.6538d, 1921651.16d }
      
      For Each value In values
         For Each formatString In formatStrings
            Dim resultString As String = value.ToString(formatString, culture)
            Console.WriteLine("{0,-18} -->  {1}", formatString, resultString)
         Next
         Console.WriteLine()      
      Next   
   End Sub
End Module
' The example displays the following output:
'       C2                 -->  $1,345.65
'       E1                 -->  1.3E+003
'       F                  -->  1345.65
'       G3                 -->  1.35E+03
'       N                  -->  1,345.65
'       #,##0.000          -->  1,345.654
'       0,000,000,000.0##  -->  0,000,001,345.654
'       
'       C2                 -->  $1,921,651.16
'       E1                 -->  1.9E+006
'       F                  -->  1921651.16
'       G3                 -->  1.92E+06
'       N                  -->  1,921,651.16
'       #,##0.000          -->  1,921,651.160
'       0,000,000,000.0##  -->  0,001,921,651.16

それ以外の場合、書式指定文字列の使用は暗黙的です。In other cases, the use of a format string is implicit. たとえば、次のメソッド呼び出しの既定値またはパラメーターなしでDecimal.ToString()の値は、メソッド、Decimalインスタンスは一般 ("G") 書式指定子とここでは、現在のカルチャの規則を使用して書式設定、EN-US カルチャ。For example, in the following method calls to the default or parameterless Decimal.ToString() method, the value of the Decimal instance is formatted by using the general ("G") format specifier and the conventions of the current culture, which in this case is the en-US culture.

using System;

public class Example
{
   public static void Main()
   {
      Decimal[] values = { 1345.6538m, 1921651.16m };
      
      foreach (var value in values) {
         string resultString = value.ToString();
         Console.WriteLine(resultString);
         Console.WriteLine();      
      }   
   }
}
// The example displays the following output:
//       1345.6538
//       
//       1921651.16
Module Example
   Public Sub Main()
      Dim values() As Decimal = { 1345.6538d, 1921651.16d }
      
      For Each value In values
         Dim resultString As String = value.ToString()
         Console.WriteLine(resultString)
         Console.WriteLine()      
      Next   
   End Sub
End Module
' The example displays the following output:
'       1345.6538
'       
'       1921651.16

各標準の数値書式指定文字列は、1 つ以上を使用NumberFormatInfoプロパティを確認して、パターンまたは結果の文字列で使用される記号。Each standard numeric format string uses one or more NumberFormatInfo properties to determine the pattern or the symbols used in the result string. 同様に、各カスタム数値書式指定子「0」、「#」記号を挿入で定義されている結果の文字列の点を除いてNumberFormatInfoプロパティ。Similarly, each custom numeric format specifier except "0" and "#" insert symbols in the result string that are defined by NumberFormatInfo properties. 次の表は、標準およびカスタム数値書式指定子とそれに関連付けられたNumberFormatInfoプロパティ。The following table lists the standard and custom numeric format specifiers and their associated NumberFormatInfo properties. 特定のカルチャの結果文字列の外観を変更するを参照してください。、変更 NumberFormatInfo のプロパティセクション。To change the appearance of the result string for a particular culture, see the Modifying NumberFormatInfo properties section. これらの使用方法の詳細の書式指定子を参照してくださいStandard Numeric Format Stringsカスタム数値書式指定文字列します。For details about the use of these format specifiers, see Standard Numeric Format Strings and Custom Numeric Format Strings.

書式指定子Format specifier 関連付けられたプロパティAssociated properties
"C"または"c"(通貨の書式指定子)"C" or "c" (currency format specifier) CurrencyDecimalDigits、小数部桁数の既定値を定義します。CurrencyDecimalDigits, to define the default number of fractional digits.

CurrencyDecimalSeparator (小数点の記号を定義します)。CurrencyDecimalSeparator, to define the decimal separator symbol.

CurrencyGroupSeparator、何千台ものグループを定義する区切り記号。CurrencyGroupSeparator, to define the group or thousands separator.

CurrencyGroupSizes、整数のグループのサイズを定義します。CurrencyGroupSizes, to define the sizes of integral groups.

CurrencyNegativePattern、負の通貨値のパターンを定義します。CurrencyNegativePattern, to define the pattern of negative currency values.

CurrencyPositivePattern、通貨の正の値のパターンを定義します。CurrencyPositivePattern, to define the pattern of positive currency values.

CurrencySymbol、通貨記号を定義します。CurrencySymbol, to define the currency symbol.

NegativeSign (マイナス記号を定義します)。NegativeSign, to define the negative sign symbol.
"D"または"d"(10 進数の書式指定子)"D" or "d" (decimal format specifier) NegativeSign (マイナス記号を定義します)。NegativeSign, to define the negative sign symbol.
"E"または"e"(指数関数的または指数の書式指定子)"E" or "e" (exponential or scientific format specifier) NegativeSign、仮数と指数部の負の記号を定義します。NegativeSign, to define the negative sign symbol in the mantissa and exponent.

NumberDecimalSeparator (小数点の記号を定義します)。NumberDecimalSeparator, to define the decimal separator symbol.

PositiveSign、指数部の正の記号を定義します。PositiveSign, to define the positive sign symbol in the exponent.
"F"または"f"(固定小数点の書式指定子)"F" or "f" (fixed-point format specifier) NegativeSign (マイナス記号を定義します)。NegativeSign, to define the negative sign symbol.

NumberDecimalDigits、小数部桁数の既定値を定義します。NumberDecimalDigits, to define the default number of fractional digits.

NumberDecimalSeparator (小数点の記号を定義します)。NumberDecimalSeparator, to define the decimal separator symbol.
"G"または"g"(一般的な形式指定子)"G" or "g" (general format specifier) NegativeSign (マイナス記号を定義します)。NegativeSign, to define the negative sign symbol.

NumberDecimalSeparator (小数点の記号を定義します)。NumberDecimalSeparator, to define the decimal separator symbol.

PositiveSign、指数形式で結果の文字列の正の記号を定義します。PositiveSign, to define the positive sign symbol for result strings in exponential format.
"N"または"n"(数値書式指定子)"N" or "n" (number format specifier) NegativeSign (マイナス記号を定義します)。NegativeSign, to define the negative sign symbol.

NumberDecimalDigits、小数部桁数の既定値を定義します。NumberDecimalDigits, to define the default number of fractional digits.

NumberDecimalSeparator (小数点の記号を定義します)。NumberDecimalSeparator, to define the decimal separator symbol.

NumberGroupSeparator、(数千) を区切り記号を定義します。NumberGroupSeparator, to define the group separator (thousands) symbol.

NumberGroupSizes、グループ内の整数の桁の数を定義します。NumberGroupSizes, to define the number of integral digits in a group.

NumberNegativePattern、負の値の形式を定義します。NumberNegativePattern, to define the format of negative values.
"P"または"p"(パーセント書式指定子)"P" or "p" (percent format specifier) NegativeSign (マイナス記号を定義します)。NegativeSign, to define the negative sign symbol.

PercentDecimalDigits、小数部桁数の既定値を定義します。PercentDecimalDigits, to define the default number of fractional digits.

PercentDecimalSeparator (小数点の記号を定義します)。PercentDecimalSeparator, to define the decimal separator symbol.

PercentGroupSeparator、桁区切り記号を定義します。PercentGroupSeparator, to define the group separator symbol.

PercentGroupSizes、グループ内の整数の桁の数を定義します。PercentGroupSizes, to define the number of integral digits in a group.

PercentNegativePattern、パーセント記号と負の値の負の符号の位置を定義します。PercentNegativePattern, to define the placement of the percent symbol and the negative symbol for negative values.

PercentPositivePatternを正の値のパーセント記号の位置を定義します。PercentPositivePattern, to define the placement of the percent symbol for positive values.

PercentSymbol、パーセント記号を定義します。PercentSymbol, to define the percent symbol.
"R"または"r"(ラウンドト リップ書式指定子)"R" or "r" (round-trip format specifier) NegativeSign (マイナス記号を定義します)。NegativeSign, to define the negative sign symbol.

NumberDecimalSeparator (小数点の記号を定義します)。NumberDecimalSeparator, to define the decimal separator symbol.

PositiveSign、指数部の正の記号を定義します。PositiveSign, to define the positive sign symbol in an exponent.
"X"または"x"(16 進数の書式指定子)"X" or "x" (hexadecimal format specifier) なし。None.
"."(小数点 10 進数のカスタム書式指定子)"." (decimal point custom format specifier) NumberDecimalSeparator (小数点の記号を定義します)。NumberDecimalSeparator, to define the decimal separator symbol.
"、"(グループ区切り記号のカスタム書式指定子)"," (group separator custom format specifier) NumberGroupSeparator、グループ (1,000 単位) の区切り記号を定義します。NumberGroupSeparator, to define the group (thousands) separator symbol.
「%」(パーセント プレース ホルダーのカスタム書式指定子)"%" (percentage placeholder custom format specifier) PercentSymbol、パーセント記号を定義します。PercentSymbol, to define the percent symbol.
「‰」(あたりパーミル プレース ホルダーのカスタム書式指定子)"‰" (per mille placeholder custom format specifier) PerMilleSymbolを定義する、パーミル記号。PerMilleSymbol, to define the per mille symbol.
"E"(指数表記のカスタム書式指定子)"E" (exponential notation custom format specifier) NegativeSign、仮数と指数部の負の記号を定義します。NegativeSign, to define the negative sign symbol in the mantissa and exponent.

PositiveSign、指数部の正の記号を定義します。PositiveSign, to define the positive sign symbol in the exponent.

なお、NumberFormatInfoクラスが含まれています、NativeDigits特定のカルチャで使用される基本の 10 桁を指定するプロパティ。Note that the NumberFormatInfo class includes a NativeDigits property that specifies the base 10 digits used by a specific culture. ただし、プロパティを書式設定操作; で使用できません。基本ラテンの数字 0 のみ (u+0030) 9 から (u+0039)、結果の文字列で使用されます。However, the property is not used in formatting operations; only the Basic Latin digits 0 (U+0030) through 9 (U+0039) are used in the result string. さらに、SingleDoubleの値NaNPositiveInfinityNegativeInfinity、結果の文字列だけで構成されてによって定義されているシンボル、 NaNSymbolPositiveInfinitySymbol、およびNegativeInfinitySymbolプロパティ、それぞれします。In addition, for Single and Double values of NaN, PositiveInfinity, and NegativeInfinity, the result string consists exclusively of the symbols defined by the NaNSymbol, PositiveInfinitySymbol, and NegativeInfinitySymbol properties, respectively.

NumberFormatInfo のプロパティを変更します。Modifying NumberFormatInfo properties

プロパティを変更することができます、NumberFormatInfo数値書式設定操作で生成される結果の文字列をカスタマイズするオブジェクト。You can modify the properties of a NumberFormatInfo object to customize the result string produced in a numeric formatting operation. この操作を行うには、次の手順を実行します。To do this:

  1. 読み取り/書き込みコピーを作成、NumberFormatInfo書式指定規則を変更するオブジェクト。Create a read/write copy of a NumberFormatInfo object whose formatting conventions you want to modify. 詳細については、次を参照してください。、 NumberFormatInfo オブジェクトをインスタンス化するセクション。For more information, see the Instantiating a NumberFormatInfo object section.

  2. プロパティまたは目的の結果文字列を生成するために使用されるプロパティを変更します。Modify the property or properties that are used to produce the desired result string. どのように書式設定メソッドの使用についてはNumberFormatInfo結果の文字列を定義するプロパティを参照してください、書式指定文字列と NumberFormatInfo のプロパティセクション。For information about how formatting methods use NumberFormatInfo properties to define result strings, see the Format strings and NumberFormatInfo properties section.

  3. ユーザー設定を使用して、NumberFormatInfoオブジェクトとして、IFormatProvider書式指定メソッドの呼び出しで引数。Use the custom NumberFormatInfo object as the IFormatProvider argument in calls to formatting methods.

注意

動的にアプリケーションを起動するたびのカルチャのプロパティの値を変更、代わりに使用することができます、CultureAndRegionInfoBuilderカスタム カルチャ (カルチャ固有の名前を持つし、既存のカルチャのドキュメントを補足する) または代替のいずれかを定義するクラス(1 つは、特定のカルチャではなく) のカルチャ。Instead of dynamically modifying a culture's property values each time an application is started, you can use the CultureAndRegionInfoBuilder class to define either a custom culture (a culture that has a unique name and that supplements existing cultures) or a replacement culture (one that is used instead of a specific culture).

次のセクションでは、いくつかの例を提供します。The following sections provide some examples.

通貨記号とパターンの変更Modifying the currency symbol and pattern

次の例では、変更、 NumberFormatInfo EN-US カルチャの書式指定規則を表すオブジェクト。The following example modifies a NumberFormatInfo object that represents the formatting conventions of the en-US culture. ISO 4217 通貨記号を割り当てます、CurrencySymbolプロパティを通貨記号の後にスペースと数値で構成される通貨の値のパターンを定義します。It assigns the ISO-4217 currency symbol to the CurrencySymbol property and defines a pattern for currency values that consists of the currency symbol followed by a space and a numeric value.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Retrieve a writable NumberFormatInfo object.
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      NumberFormatInfo nfi = enUS.NumberFormat;

      // Use the ISO currency symbol instead of the native currency symbol.
      nfi.CurrencySymbol =  (new RegionInfo(enUS.Name)).ISOCurrencySymbol;
      // Change the positive currency pattern to <code><space><value>.
      nfi.CurrencyPositivePattern = 2;
      // Change the negative currency pattern to <code><space><sign><value>.     
      nfi.CurrencyNegativePattern = 12;
      
      // Produce the result strings by calling ToString.
      Decimal[] values = { 1065.23m, 19.89m, -.03m, -175902.32m };
      foreach (var value in values)
         Console.WriteLine(value.ToString("C", enUS));

      Console.WriteLine();
      
      // Produce the result strings by calling a composite formatting method.
      foreach (var value in values)
         Console.WriteLine(String.Format(enUS, "{0:C}", value));      
   }
}
// The example displays the following output:
//       USD 1,065.23
//       USD 19.89
//       USD -0.03
//       USD -175,902.32
//       
//       USD 1,065.23
//       USD 19.89
//       USD -0.03
//       USD -175,902.32
Imports System.Globalization

Module Example
   Public Sub Main()
      ' Retrieve a writable NumberFormatInfo object.
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim nfi As NumberFormatInfo = enUS.NumberFormat

      ' Use the ISO currency symbol instead of the native currency symbol.
      nfi.CurrencySymbol =  (New RegionInfo(enUS.Name)).ISOCurrencySymbol
      ' Change the positive currency pattern to <code><space><value>.
      nfi.CurrencyPositivePattern = 2
      ' Change the negative currency pattern to <code><space><sign><value>.     
      nfi.CurrencyNegativePattern = 12
      
      ' Produce the result strings by calling ToString.
      Dim values() As Decimal = { 1065.23d, 19.89d, -.03d, -175902.32d }
      For Each value In values
         Console.WriteLine(value.ToString("C", enUS))
      Next      
      Console.WriteLine()
      
      ' Produce the result strings by calling a composite formatting method.
      For Each value In values
         Console.WriteLine(String.Format(enUS, "{0:C}", value))      
      Next
   End Sub
End Module
' The example displays the following output:
'       USD 1,065.23
'       USD 19.89
'       USD -0.03
'       USD -175,902.32
'       
'       USD 1,065.23
'       USD 19.89
'       USD -0.03
'       USD -175,902.32

国民識別番号を書式設定Formatting a national identification number

多くの身分登録番号の数字だけで構成し、そのためのプロパティを変更して簡単にフォーマットできます、NumberFormatInfoオブジェクト。Many national identification numbers consist exclusively of digits and so can easily be formatted by modifying the properties of a NumberFormatInfo object. 米国の社会保障番号が次のように配置された 9 の数字で構成されてなど:XXX-XX-XXXXします。For example, a social security number in the United States consists of 9 digits arranged as follows: XXX-XX-XXXX. 次の例では、整数値に適切に書式設定として社会保障番号が格納されている前提としています。The following example assumes that social security numbers are stored as integer values and formats them appropriately.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Instantiate a read-only NumberFormatInfo object.
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      NumberFormatInfo nfi = enUS.NumberFormat;

      // Modify the relevant properties.
      nfi.NumberGroupSeparator = "-";
      nfi.NumberGroupSizes = new int[] { 3, 2, 4};
      nfi.NumberDecimalDigits = 0;
      
      int[] ids = { 111223333, 999776666 };
      
      // Produce the result string by calling ToString.
      foreach (var id in ids)
         Console.WriteLine(id.ToString("N", enUS));

      Console.WriteLine();
      
      // Produce the result string using composite formatting.
      foreach (var id in ids)
         Console.WriteLine(String.Format(enUS, "{0:N}", id));
   }
}
// The example displays the following output:
//       1112-23-333
//       9997-76-666
//       
//       1112-23-333
//       9997-76-666
Imports System.Globalization

Module Example
   Public Sub Main()
      ' Instantiate a read-only NumberFormatInfo object.
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim nfi As NumberFormatInfo = enUS.NumberFormat

      ' Modify the relevant properties.
      nfi.NumberGroupSeparator = "-"
      nfi.NumberGroupSizes = { 3, 2, 4}
      nfi.NumberDecimalDigits = 0
      
      Dim ids() As Integer = { 111223333, 999776666 }
      
      ' Produce the result string by calling ToString.
      For Each id In ids
         Console.WriteLine(id.ToString("N", enUS))
      Next 
      Console.WriteLine()
      
      ' Produce the result string using composite formatting.
      For Each id In ids
         Console.WriteLine(String.Format(enUS, "{0:N}", id))
      Next
   End Sub
End Module
' The example displays the following output:
'       1112-23-333
'       9997-76-666
'       
'       1112-23-333
'       9997-76-666

数値文字列の解析Parsing numeric strings

解析するには、数値の文字列形式を数値に変換する必要があります。Parsing involves converting the string representation of a number to a number. .NET Framework の各数値型には、2 つのオーバー ロードされた解析メソッドが含まれています:ParseTryParseします。Each numeric type in the .NET Framework includes two overloaded parsing methods: Parse and TryParse. Parseメソッドは文字列を数値に変換し、変換が失敗した場合に例外をスローします。The Parse method converts a string to a number and throws an exception if the conversion fails. TryParseメソッドは文字列を数値に変換に番号を割り当てます、out引数を返します、Boolean変換が成功したかどうかを示す値です。The TryParse method converts a string to a number, assigns the number to an out argument, and returns a Boolean value that indicates whether the conversion succeeded.

暗黙的または明示的に使用して解析メソッドをNumberStyles(グループ区切り記号、小数点記号、通貨記号など) には、どのようなスタイル要素は、解析操作が成功する場合、文字列内に存在するかを決定する列挙値。The parsing methods implicitly or explicitly use a NumberStyles enumeration value to determine what style elements (such as group separators, a decimal separator, or a currency symbol) can be present in a string if the parsing operation is to succeed. 場合、NumberStyles値は既定では、メソッド呼び出しで指定されていない、NumberStylesを含む値、FloatAllowThousandsグループ記号、小数点区切り文字、負の符号に解析された文字列を含めることができますを指定するフラグ空白文字、またはそれには、指数表記の数値の文字列形式を指定できます。If a NumberStyles value is not provided in the method call, the default is a NumberStyles value that includes the Float and AllowThousands flags, which specifies that the parsed string can include group symbols, a decimal separator, a negative sign, and white-space characters, or it can be the string representation of a number in exponential notation.

解析メソッドも暗黙的または明示的に使用して、NumberFormatInfoパターンを特定のシンボルを定義するオブジェクトを解析する文字列で発生する可能性が。The parsing methods also implicitly or explicitly use a NumberFormatInfo object that defines the specific symbols and patterns that can occur in the string to be parsed. 場合、NumberFormatInfoオブジェクトが指定されていない、既定値は、NumberFormatInfoの現在のスレッド カルチャ。If a NumberFormatInfo object is not provided, the default is the NumberFormatInfo for the current thread culture. 解析の詳細についてなど、個々 の解析メソッドを参照してくださいInt16.Parse(String)Int32.Parse(String, NumberStyles)Int64.Parse(String, IFormatProvider)Decimal.Parse(String, NumberStyles, IFormatProvider)Double.TryParse(String, Double)、およびBigInteger.TryParse(String, NumberStyles, IFormatProvider, BigInteger)します。For more information about parsing, see the individual parsing methods, such as Int16.Parse(String), Int32.Parse(String, NumberStyles), Int64.Parse(String, IFormatProvider), Decimal.Parse(String, NumberStyles, IFormatProvider), Double.TryParse(String, Double), and BigInteger.TryParse(String, NumberStyles, IFormatProvider, BigInteger).

次の例では、文字列の解析のカルチャに依存する性質を示します。The following example illustrates the culture-sensitive nature of parsing strings. 数千ものを含む文字列を解析しようと、EN-US、FR-FR、およびインバリアント カルチャの規則を使用して区切り記号。It tries to parse a string that include thousands separators by using the conventions of the en-US, fr-FR, and invariant cultures. 小数点区切り文字を FR-FR カルチャで解析できない場合に、グループ区切り記号、ピリオド、コンマを含む文字列と、グループ区切り記号として white space と 10 進区切り記号としてコンマ文字列は EN-US およびインバリアント カルチャの解析に失敗します。A string that includes the comma as a group separator and the period as a decimal separator fails to parse in the fr-FR culture, and a string with white space as a group separator and a comma as a decimal separator fails to parse in the en-US and invariant cultures.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      String[] values = { "1,034,562.91", "9 532 978,07" };
      String[] cultureNames = { "en-US", "fr-FR", "" };
      
      foreach (var value in values) {
         foreach (var cultureName in cultureNames) {
            CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
            String name = culture.Name == "" ? "Invariant" : culture.Name;
            try {
               Decimal amount = Decimal.Parse(value, culture);
               Console.WriteLine("'{0}' --> {1} ({2})", value, amount, name);
            }
            catch (FormatException) {
               Console.WriteLine("'{0}': FormatException ({1})",
                                 value, name);
            }   
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       '1,034,562.91' --> 1034562.91 (en-US)
//       '1,034,562.91': FormatException (fr-FR)
//       '1,034,562.91' --> 1034562.91 (Invariant)
//       
//       '9 532 978,07': FormatException (en-US)
//       '9 532 978,07' --> 9532978.07 (fr-FR)
//       '9 532 978,07': FormatException (Invariant)
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim values() As String = { "1,034,562.91", "9 532 978,07" }
      Dim cultureNames() As String = { "en-US", "fr-FR", "" }
      
      For Each value In values
         For Each cultureName In cultureNames
            Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
            Dim name As String = If(culture.Name = "", "Invariant", culture.Name)
            Try
               Dim amount As Decimal = Decimal.Parse(value, culture)
               Console.WriteLine("'{0}' --> {1} ({2})", value, amount, name)
            Catch e As FormatException
               Console.WriteLine("'{0}': FormatException ({1})",
                                 value, name)
            End Try   
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       '1,034,562.91' --> 1034562.91 (en-US)
'       '1,034,562.91': FormatException (fr-FR)
'       '1,034,562.91' --> 1034562.91 (Invariant)
'       
'       '9 532 978,07': FormatException (en-US)
'       '9 532 978,07' --> 9532978.07 (fr-FR)
'       '9 532 978,07': FormatException (Invariant)

通常の解析は、2 つのコンテキストで行われます。Parsing generally occurs in two contexts:

  • としてユーザー入力を数値に変換するように設計された操作。As an operation that is designed to convert user input into a numeric value.

  • 設計されている操作として数値の値をラウンドト リップさせるつまり、数値を文字列としてシリアル化された以前の逆シリアル化します。As an operation that is designed to round-trip a numeric value; that is, to deserialize a numeric value that was previously serialized as a string.

次のセクションには、さらに詳しくこれら 2 つの操作について説明します。The following sections discuss these two operations in greater detail.

ユーザー文字列の解析Parsing user strings

常にインスタンス化する必要がある、ユーザーが入力した数値の文字列を解析するときに、NumberFormatInfoユーザーのカルチャ設定を反映するオブジェクト。When you are parsing numeric strings input by the user, you should always instantiate a NumberFormatInfo object that reflects the user's cultural settings. インスタンスを作成する方法については、NumberFormatInfoユーザーによるカスタマイズを反映するオブジェクトを参照してください、 NumberFormatInfo と動的データセクション。For information about how to instantiate a NumberFormatInfo object that reflects user customizations, see the NumberFormatInfo and dynamic data section.

次の例は、ユーザーのカルチャ設定を反映する解析操作とにはない 1 つの違いを示しています。The following example illustrates the difference between a parsing operation that reflects user cultural settings and one that does not. この場合、システムの既定のカルチャは EN-US が、ユーザーが定義されている小数点記号として「,」と"."コントロール パネルで、グループ区切り記号として地域と言語します。In this case, the default system culture is en-US, but the user has defined "," as the decimal symbol and "." as the group separator in Control Panel, Region and Language. 通常、これらのシンボルは、既定値 EN-US カルチャで取り消されます。Ordinarily, these symbols are reversed in the default en-US culture. ときにユーザーが、ユーザー設定を反映する文字列を入力し、によって文字列が解析、NumberFormatInfoも (上書き) のユーザー設定が反映されているオブジェクトが解析操作が正しい結果を返します。When the user enters a string that reflects user settings, and the string is parsed by a NumberFormatInfo object that also reflects user settings (overrides), the parsing operation returns a correct result. ただし、文字列の解析時で、NumberFormatInfo標準的な EN-US カルチャの設定を反映するオブジェクト、グループ区切り記号としてコンマ シンボルは誤りし、不適切な結果を返します。However, when the string is parsed by a NumberFormatInfo object that reflects standard en-US cultural settings, it mistakes the comma symbol for a group separator and returns an incorrect result.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo stdCulture = CultureInfo.GetCultureInfo("en-US");
      CultureInfo custCulture = CultureInfo.CreateSpecificCulture("en-US"); 
            
      String value = "310,16";
      try {
         Console.WriteLine("{0} culture reflects user overrides: {1}", 
                           stdCulture.Name, stdCulture.UseUserOverride);
         Decimal amount = Decimal.Parse(value, stdCulture);
         Console.WriteLine("'{0}' --> {1}", value, amount.ToString(CultureInfo.InvariantCulture));                                                                                        
      }
      catch (FormatException) {
         Console.WriteLine("Unable to parse '{0}'", value);
      }    
      Console.WriteLine();
                                            
      try {
         Console.WriteLine("{0} culture reflects user overrides: {1}", 
                           custCulture.Name, custCulture.UseUserOverride);
         Decimal amount = Decimal.Parse(value, custCulture);
         Console.WriteLine("'{0}' --> {1}", value, amount.ToString(CultureInfo.InvariantCulture));                                                                                        
      }
      catch (FormatException) {
         Console.WriteLine("Unable to parse '{0}'", value);
      }   
   }
}
// The example displays the following output:
//       en-US culture reflects user overrides: False
//       '310,16' --> 31016
//       
//       en-US culture reflects user overrides: True
//       '310,16' --> 310.16
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim stdCulture As CultureInfo = CultureInfo.GetCultureInfo("en-US")
      Dim custCulture As CultureInfo = CultureInfo.CreateSpecificCulture("en-US") 
            
      Dim value As String = "310,16"
      Try
         Console.WriteLine("{0} culture reflects user overrides: {1}", 
                           stdCulture.Name, stdCulture.UseUserOverride)
         Dim amount As Decimal = Decimal.Parse(value, stdCulture)
         Console.WriteLine("'{0}' --> {1}", value, amount.ToString(CultureInfo.InvariantCulture))                                                                                        
      Catch e As FormatException
         Console.WriteLine("Unable to parse '{0}'", value)
      End Try   
      Console.WriteLine()
                                            
      Try
         Console.WriteLine("{0} culture reflects user overrides: {1}", 
                           custCulture.Name, custCulture.UseUserOverride)
         Dim amount As Decimal = Decimal.Parse(value, custCulture)
         Console.WriteLine("'{0}' --> {1}", value, amount.ToString(CultureInfo.InvariantCulture))                                                                                        
      Catch e As FormatException
         Console.WriteLine("Unable to parse '{0}'", value)
      End Try   
   End Sub
End Module
' The example displays the following output:
'       en-US culture reflects user overrides: False
'       '310,16' --> 31016
'       
'       en-US culture reflects user overrides: True
'       '310,16' --> 310.16

シリアル化して、数値データを逆シリアル化Serializing and deserializing numeric data

数値データが文字列の形式でシリアル化し、後で逆シリアル化で、解析時に、文字列を生成およびインバリアント カルチャの規則を使用して解析する必要があります。When numeric data is serialized in string format and later deserialized and parsed, the strings should be generated and parsed by using the conventions of the invariant culture. 書式設定と解析操作では、特定のカルチャの規則は反映されませんする必要があります。The formatting and parsing operations should never reflect the conventions of a specific culture. データの移植性が厳密に制限されます。 カルチャに固有の設定を使用する場合カルチャに固有の設定は、シリアル化されたスレッドのと同じスレッドでのみ正常に逆シリアル化されたことができます。If culture-specific settings are used, the portability of the data is strictly limited; it can be successfully deserialized only on a thread whose culture-specific settings are identical to those of the thread on which it was serialized. 場合によっては、データのこともできないことを意味するシリアル化された同じシステム上で正常に逆シリアル化されました。In some cases, this means that the data cannot even be successfully deserialized on the same system on which it was serialized.

この原則に違反した場合、何が起こり、次の例を示しています。The following example illustrates what can happen when this principle is violated. 現在のスレッドは、EN-US カルチャのカルチャに固有の設定を使用する場合は、配列内の浮動小数点値を文字列に変換します。Floating-point values in an array are converted to strings when the current thread uses the culture-specific settings of the en-US culture. EN-GB カルチャのカルチャに固有の設定を使用するスレッドによってデータが解析されます。The data is then parsed by a thread that uses the culture-specific settings of the en-GB culture. ここでは、各解析操作が成功すると、データされていませんラウンド トリップが正常とデータの破損が発生します。In this case, although each parsing operation succeeds, the data does not round-trip successfully and data corruption occurs. その他の場合は、解析操作が失敗して、FormatException例外がスローされることです。In other cases, a parsing operation could fail and a FormatException exception could be thrown.

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
      PersistData();
      
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      RestoreData();
   }

   private static void PersistData()
   {
      // Define an array of floating-point values.
      Double[] values = { 160325.972, 8631.16, 1.304e5, 98017554.385, 
                          8.5938287084321676e94 };
      Console.WriteLine("Original values: ");
      foreach (var value in values) 
         Console.WriteLine(value.ToString("R", CultureInfo.InvariantCulture));
         
      // Serialize an array of doubles to a file 
      StreamWriter sw = new StreamWriter(@".\NumericData.bin");
      for (int ctr = 0; ctr < values.Length; ctr++) {
         sw.Write(values[ctr].ToString("R"));
         if (ctr < values.Length - 1) sw.Write("|");
      }
      sw.Close();
      Console.WriteLine();
   }
   
   private static void RestoreData()
   {   
      // Deserialize the data
      StreamReader sr = new StreamReader(@".\NumericData.bin");
      String data = sr.ReadToEnd();
      sr.Close();
      
      String[] stringValues = data.Split('|');
      List<Double> newValueList = new List<Double>();
      
      foreach (var stringValue in stringValues) {
         try {
            newValueList.Add(Double.Parse(stringValue));
         }
         catch (FormatException) {
            newValueList.Add(Double.NaN);
         }   
      }                                   

      Console.WriteLine("Restored values:");
      foreach (var newValue in newValueList) 
         Console.WriteLine(newValue.ToString("R", NumberFormatInfo.InvariantInfo));
   }
}
// The example displays the following output:
//       Original values:
//       160325.972
//       8631.16
//       130400
//       98017554.385
//       8.5938287084321671E+94
//       
//       Restored values:
//       160325972
//       863116
//       130400
//       98017554385
//       8.5938287084321666E+110
Imports System.Collections.Generic
Imports System.Globalization
Imports System.IO
Imports System.Threading

Module Example
   Public Sub Main()
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
      PersistData()
      
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB")
      RestoreData()
   End Sub
   
   Private Sub PersistData()
      ' Define an array of floating-point values.
      Dim values() As Double = { 160325.972, 8631.16, 1.304e5, 98017554.385, 
                                 8.5938287084321676e94 }
      Console.WriteLine("Original values: ")
      For Each value In values
         Console.WriteLine(value.ToString("R", CultureInfo.InvariantCulture))
      Next
         
      ' Serialize an array of doubles to a file 
      Dim sw As New StreamWriter(".\NumericData.bin")
      For ctr As Integer = 0 To values.Length - 1
         sw.Write(values(ctr).ToString("R"))
         If ctr < values.Length - 1 Then sw.Write("|")
      Next
      sw.Close()
      Console.WriteLine()
   End Sub
   
   Private Sub RestoreData()   
      ' Deserialize the data
      Dim sr AS New StreamReader(".\NumericData.bin")
      Dim data As String = sr.ReadToEnd()
      sr.Close()
      
      Dim stringValues() As String = data.Split("|"c)
      Dim newValueList As New List(Of Double)
      
      For Each stringValue In stringValues
         Try
            newValueList.Add(Double.Parse(stringValue))
         Catch e As FormatException
            newValueList.Add(Double.NaN)
         End Try   
      Next                                   

      Console.WriteLine("Restored values:")
      For Each newValue In newValueList
         Console.WriteLine(newValue.ToString("R", NumberFormatInfo.InvariantInfo))
      Next
   End Sub
End Module
' The example displays the following output:
'       Original values:
'       160325.972
'       8631.16
'       130400
'       98017554.385
'       8.5938287084321671E+94
'       
'       Restored values:
'       160325972
'       863116
'       130400
'       98017554385
'       8.5938287084321666E+110

コンストラクター

NumberFormatInfo() NumberFormatInfo() NumberFormatInfo() NumberFormatInfo()

カルチャに依存しない (インバリアントな) NumberFormatInfo クラスの新しい書き込み可能インスタンスを初期化します。Initializes a new writable instance of the NumberFormatInfo class that is culture-independent (invariant).

プロパティ

CurrencyDecimalDigits CurrencyDecimalDigits CurrencyDecimalDigits CurrencyDecimalDigits

通貨の値で使用する小数点以下の桁数を取得または設定します。Gets or sets the number of decimal places to use in currency values.

CurrencyDecimalSeparator CurrencyDecimalSeparator CurrencyDecimalSeparator CurrencyDecimalSeparator

通貨の値で桁区切り記号として使用する文字列を取得または設定します。Gets or sets the string to use as the decimal separator in currency values.

CurrencyGroupSeparator CurrencyGroupSeparator CurrencyGroupSeparator CurrencyGroupSeparator

通貨の値で小数点の左にある数字のグループを区切る文字列を取得または設定します。Gets or sets the string that separates groups of digits to the left of the decimal in currency values.

CurrencyGroupSizes CurrencyGroupSizes CurrencyGroupSizes CurrencyGroupSizes

通貨の値で小数点の左にある各グループの数字の数を取得または設定します。Gets or sets the number of digits in each group to the left of the decimal in currency values.

CurrencyNegativePattern CurrencyNegativePattern CurrencyNegativePattern CurrencyNegativePattern

負の通貨値の形式パターンを取得または設定します。Gets or sets the format pattern for negative currency values.

CurrencyPositivePattern CurrencyPositivePattern CurrencyPositivePattern CurrencyPositivePattern

通貨の正の値の形式パターンを取得または設定します。Gets or sets the format pattern for positive currency values.

CurrencySymbol CurrencySymbol CurrencySymbol CurrencySymbol

通貨記号として使用する文字列を取得または設定します。Gets or sets the string to use as the currency symbol.

CurrentInfo CurrentInfo CurrentInfo CurrentInfo

現在のカルチャに基づいて値を形式指定する読み取り専用 NumberFormatInfo を取得します。Gets a read-only NumberFormatInfo that formats values based on the current culture.

DigitSubstitution DigitSubstitution DigitSubstitution DigitSubstitution

グラフィカル ユーザー インターフェイスが数字の形状を表示する方法を指定する値を取得または設定します。Gets or sets a value that specifies how the graphical user interface displays the shape of a digit.

InvariantInfo InvariantInfo InvariantInfo InvariantInfo

カルチャに依存しない (インバリアントな) 読み取り専用 NumberFormatInfo オブジェクトを取得します。Gets a read-only NumberFormatInfo object that is culture-independent (invariant).

IsReadOnly IsReadOnly IsReadOnly IsReadOnly

この NumberFormatInfo オブジェクトが読み取り専用かどうかを示す値を取得します。Gets a value that indicates whether this NumberFormatInfo object is read-only.

NaNSymbol NaNSymbol NaNSymbol NaNSymbol

IEEE NaN (非数) 値を表す文字列を取得または設定します。Gets or sets the string that represents the IEEE NaN (not a number) value.

NativeDigits NativeDigits NativeDigits NativeDigits

西洋数字 0 ~ 9 に等しいネイティブ数字の文字列配列を取得または設定します。Gets or sets a string array of native digits equivalent to the Western digits 0 through 9.

NegativeInfinitySymbol NegativeInfinitySymbol NegativeInfinitySymbol NegativeInfinitySymbol

負の無限大を表す文字列を取得または設定します。Gets or sets the string that represents negative infinity.

NegativeSign NegativeSign NegativeSign NegativeSign

関連付けられた数値が負であることを示す文字列を取得または設定します。Gets or sets the string that denotes that the associated number is negative.

NumberDecimalDigits NumberDecimalDigits NumberDecimalDigits NumberDecimalDigits

数値で使用する小数点以下の桁数を取得または設定します。Gets or sets the number of decimal places to use in numeric values.

NumberDecimalSeparator NumberDecimalSeparator NumberDecimalSeparator NumberDecimalSeparator

数値で桁区切り記号として使用する文字列を取得または設定します。Gets or sets the string to use as the decimal separator in numeric values.

NumberGroupSeparator NumberGroupSeparator NumberGroupSeparator NumberGroupSeparator

数値で小数点の左にある数字のグループを区切る文字列を取得または設定します。Gets or sets the string that separates groups of digits to the left of the decimal in numeric values.

NumberGroupSizes NumberGroupSizes NumberGroupSizes NumberGroupSizes

数値で小数点の左にある各グループの数字の数を取得または設定します。Gets or sets the number of digits in each group to the left of the decimal in numeric values.

NumberNegativePattern NumberNegativePattern NumberNegativePattern NumberNegativePattern

負の数値の形式パターンを取得または設定します。Gets or sets the format pattern for negative numeric values.

PercentDecimalDigits PercentDecimalDigits PercentDecimalDigits PercentDecimalDigits

パーセント値で使用する小数点以下の桁数を取得または設定します。Gets or sets the number of decimal places to use in percent values.

PercentDecimalSeparator PercentDecimalSeparator PercentDecimalSeparator PercentDecimalSeparator

パーセント値で桁区切り記号として使用する文字列を取得または設定します。Gets or sets the string to use as the decimal separator in percent values.

PercentGroupSeparator PercentGroupSeparator PercentGroupSeparator PercentGroupSeparator

パーセント値で小数点の左にある数字のグループを区切る文字列を取得または設定します。Gets or sets the string that separates groups of digits to the left of the decimal in percent values.

PercentGroupSizes PercentGroupSizes PercentGroupSizes PercentGroupSizes

パーセント値で小数点の左にある各グループの数字の数を取得または設定します。Gets or sets the number of digits in each group to the left of the decimal in percent values.

PercentNegativePattern PercentNegativePattern PercentNegativePattern PercentNegativePattern

負のパーセント値の形式パターンを取得または設定します。Gets or sets the format pattern for negative percent values.

PercentPositivePattern PercentPositivePattern PercentPositivePattern PercentPositivePattern

正のパーセント値の形式パターンを取得または設定します。Gets or sets the format pattern for positive percent values.

PercentSymbol PercentSymbol PercentSymbol PercentSymbol

パーセント記号として使用する文字列を取得または設定します。Gets or sets the string to use as the percent symbol.

PerMilleSymbol PerMilleSymbol PerMilleSymbol PerMilleSymbol

パーミル記号として使用する文字列を取得または設定します。Gets or sets the string to use as the per mille symbol.

PositiveInfinitySymbol PositiveInfinitySymbol PositiveInfinitySymbol PositiveInfinitySymbol

正の無限大を表す文字列を取得または設定します。Gets or sets the string that represents positive infinity.

PositiveSign PositiveSign PositiveSign PositiveSign

関連付けられた数値が正であることを示す文字列を取得または設定します。Gets or sets the string that denotes that the associated number is positive.

メソッド

Clone() Clone() Clone() Clone()

NumberFormatInfo オブジェクトの簡易コピーを作成します。Creates a shallow copy of the NumberFormatInfo object.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetFormat(Type) GetFormat(Type) GetFormat(Type) GetFormat(Type)

数値形式指定サービスを提供する指定した型のオブジェクトを取得します。Gets an object of the specified type that provides a number formatting service.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetInstance(IFormatProvider) GetInstance(IFormatProvider) GetInstance(IFormatProvider) GetInstance(IFormatProvider)

指定された NumberFormatInfo に関連付けられている IFormatProvider を取得します。Gets the NumberFormatInfo associated with the specified IFormatProvider.

GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ReadOnly(NumberFormatInfo) ReadOnly(NumberFormatInfo) ReadOnly(NumberFormatInfo) ReadOnly(NumberFormatInfo)

読み取り専用 NumberFormatInfo ラッパーを返します。Returns a read-only NumberFormatInfo wrapper.

ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象

こちらもご覧ください