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.

다음 예제에서는 이러한 세 가지 방법을 사용 하 여 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:

다음 예제를 인스턴스화하는 두 가지는 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 USD로 통화 값을 표시 하도록 선택할 수 있습니다.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) 생성자 및 값을 제공 false 에 대 한는 useUserOverride 인수입니다.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. 다음 예에서는 현재 문화권이 영어 (미국) 인 및 해당 통화 기호 USD로 $ 기본값에서 변경 되었습니다 시스템에 대 한 예시를 제공 합니다.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. NumberFormatInfo 문화권에 따라 서식 지정 작업 결과에 문자열을 받지 않아야에 고정 문화권의 서식 규칙을 나타내는 개체를 사용할 수 있습니다.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:

다음 예제에서는 이러한 네 가지 방법으로 만들 수는 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. 일반적으로 하나 이상의 특정 문화권의 부모가 됩니다.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 중립 문화권의 서식 규칙을 반영 하는 개체를 throw를 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.

그러나 특정 국가/지역 독립적 이기 때문에 중립 문화권에 culture 별 서식 지정 정보를 없습니다.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-US 문화권의 서식 규칙을 반영 하는 en 중립 문화권에 대 한 개체 및 NumberFormatInfo FR-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 및 dynamic dataNumberFormatInfo and dynamic data

제공 하는 숫자 값의 서식을 지정 하는 것에 대 한 culture 별 데이터를 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. 다른 데이터는 애플리케이션 세션 간에 또는 다음과 같은 이유로 단일 세션 내 에서도 변경할 수 있습니다.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. 예를 들어, 사용자는 다양 한 통화 기호 또는 다른 소수 구분 기호를 선택할 수 있습니다.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

NumberFormatInfo 개체는 암시적 또는 명시적으로 모든 숫자 서식 지정 작업입니다.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 단일 메서드를 포함 하는 인터페이스 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에서는 두 개의 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[]) 메서드 요청 NumberFormatInfo 하 고 DateTimeFormatInfo 개체 뿐만 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

각 표준 숫자 서식 문자열에 하나 이상을 사용 하 여 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.
"." (소수점 사용자 지정 형식 지정자)"." (decimal point custom format specifier) NumberDecimalSeparator에 소수 구분 기호를 정의 합니다.NumberDecimalSeparator, to define the decimal separator symbol.
"," (그룹 구분 기호 사용자 지정 형식 지정자)"," (group separator custom format specifier) NumberGroupSeparator에서 그룹 (천 단위) 구분 기호를 정의 합니다.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 의 값 NaN, PositiveInfinity, 및 NegativeInfinity, 결과 문자열에서 정의 된 기호만 구성 되어 합니다 NaNSymbol, PositiveInfinitySymbol, 및 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 (고유 이름을 가진 및 기존 문화권을 보완 하는 문화권) 사용자 지정 문화권 또는 대체를 정의 하는 클래스 (하나는 특정 문화권 대신 사용 되는) 문화권입니다.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의 각 숫자 형식: ParseTryParse입니다.Each numeric type in the .NET Framework includes two overloaded parsing methods: Parse and TryParse. Parse 메서드는 문자열을 숫자로 변환 및 변환에 실패 하면 예외를 throw 합니다.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 및 소수 구분 기호로 쉼표를 사용 하 여 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)

일반적으로 구문 분석 하는 작업은 두 가지 상황에서 발생 합니다.Parsing generally occurs in two contexts:

  • 작업으로 사용자 입력을 숫자 값으로 변환 하도록 디자인 된 합니다.As an operation that is designed to convert user input into a numeric value.

  • 디자인 된 작업으로; 숫자 값을 라운드트립 하려면 즉, 이전에 문자열로 serialize 된 숫자 값을 deserialize 하는 데 있습니다.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.

다음 섹션에서는 이러한 두 작업에 자세히 설명합니다.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 및 dynamic data 섹션입니다.For information about how to instantiate a NumberFormatInfo object that reflects user customizations, see the NumberFormatInfo and dynamic data section.

다음 예제에서는 사용자 문화권 설정을 반영 하는 구문 분석 작업을 하지 않는 사이의 차이점을 보여 줍니다.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

숫자 데이터 문자열 형식으로 직렬화 하 고 나중에 deserialize 및 구문 분석을 하는 경우 문자열을 생성 하 고 고정 문화권의 규칙을 사용 하 여 구문 분석 해야 합니다.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. 문화권별 설정을 사용 하는 경우 데이터의 이식성은 엄격 하 게 제한 합니다. culture 별 설정 되어 있는 serialize 된 스레드와 동일한 스레드에서 정상적으로 deserialize 할 수 있습니다.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. 경우에 따라 데이터에도 수 없습니다.이 즉 serialize 된 동일한 시스템에 성공적으로 deserialize 할 수 있습니다.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 예외가 throw 될 수 있습니다.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)

적용 대상

추가 정보