NumberFormatInfo Sınıf

Tanım

Sayısal değerleri biçimlendirmek ve ayrıştırmak için kültüre özgü bilgiler sağlar.

public ref class NumberFormatInfo sealed : IFormatProvider
public ref class NumberFormatInfo sealed : ICloneable, IFormatProvider
public sealed class NumberFormatInfo : IFormatProvider
public sealed class NumberFormatInfo : ICloneable, IFormatProvider
[System.Serializable]
public sealed class NumberFormatInfo : ICloneable, IFormatProvider
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class NumberFormatInfo : ICloneable, IFormatProvider
type NumberFormatInfo = class
    interface IFormatProvider
type NumberFormatInfo = class
    interface ICloneable
    interface IFormatProvider
[<System.Serializable>]
type NumberFormatInfo = class
    interface ICloneable
    interface IFormatProvider
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type NumberFormatInfo = class
    interface ICloneable
    interface IFormatProvider
Public NotInheritable Class NumberFormatInfo
Implements IFormatProvider
Public NotInheritable Class NumberFormatInfo
Implements ICloneable, IFormatProvider
Devralma
NumberFormatInfo
Öznitelikler
Uygulamalar

Örnekler

Aşağıdaki örnek, karşılık gelen bir nesne için bir nesnenin nasıl alın ve belirli bir kültüre ilişkin sayı biçimlendirme bilgilerini sorgulamak için alınan NumberFormatInfo CultureInfo nesneyi nasıl kullanabileceğini gösterir.

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 '$'

Açıklamalar

sınıfı, NumberFormatInfo sayısal değerleri biçimlendiren ve ayrıştıran kültüre özgü bilgiler içerir. Bu bilgiler para birimi simgesini, ondalık sembolünü, grup ayırıcı simgesini ve pozitif ve negatif işaretlerin simgelerini içerir.

Bir NumberFormatInfo nesnesini örnekleme

Geçerli kültürün, sabit kültürün, belirli bir kültürün veya bağımsız kültürün biçimlendirme kurallarını temsil eden bir NumberFormatInfo nesne örneği oluşturabilirsiniz.

Geçerli kültür için bir NumberFormatInfo nesnesini örnekleme

Aşağıdaki yöntemlerden herhangi NumberFormatInfo birini kullanarak geçerli kültür için bir nesne örneği leyebilirsiniz. Her durumda, döndürülen NumberFormatInfo nesne salt okunur olur.

Aşağıdaki örnek, geçerli kültürün biçimlendirme NumberFormatInfo kurallarını temsil eden nesneler oluşturmak için bu üç yolu kullanır. Ayrıca, her nesnenin salt IsReadOnly okunur olduğunu göstermek için özelliğinin değerini de verir.

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

Aşağıdaki yöntemlerden herhangi birini NumberFormatInfo kullanarak geçerli kültürün kurallarına temsil eden yazılabilir bir nesne oluşturabilirsiniz:

Aşağıdaki örnek, bir nesnenin örneğini oluşturmanın bu iki yolu gösterir ve nesnesinin salt okunur olmadığını göstermek için NumberFormatInfo IsReadOnly özelliğinin değerini görüntüler.

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

bu işletim Windows, kullanıcının sayısal biçimlendirme ve ayrıştırma işlemleri için kullanılan bazı özellik değerlerinin bölge ve dil öğesi aracılığıyla geçersiz k NumberFormatInfo Denetim Masası. Örneğin, kültürü İngilizce (Birleşik Devletler) olan bir kullanıcı, para birimi değerlerini varsayılan 1,1 ABD doları yerine 1,1 ABD doları olarak görüntülemeyi seçebilir. Daha NumberFormatInfo önce ele alınan yollarla alınan nesnelerin hepsi bu kullanıcı geçersiz kılmalarını yansıtıyor. Bu istenmeyen bir durumsa, oluşturucunu çağırarak ve bağımsız değişkeni için bir değeri serek kullanıcı geçersiz kılmalarını (ve salt okunur değil de okuma/yazma) yansıtmayan bir nesne NumberFormatInfo CultureInfo.CultureInfo(String, Boolean) false useUserOverride oluşturabilirsiniz. Aşağıdaki örnek, geçerli kültürü İngilizce (Birleşik Devletler) olan ve para birimi simgesi varsayılan $'dan USD'ye değiştirilmiş bir sistem için bir çizim sağlar.

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: $

Özelliği CultureInfo.UseUserOverride olarak true ayarlanırsa, özellikleri , ve kullanıcı CultureInfo.DateTimeFormat CultureInfo.NumberFormat CultureInfo.TextInfo ayarlarından da alınır. Kullanıcı ayarları nesneyle ilişkili kültürle uyumsuzsa (örneğin, seçilen takvim özelliği tarafından listelenen takvimlerden biri yoksa), yöntemlerin ve özelliklerin değerleri tanımsız CultureInfo OptionalCalendars olur.

Sabit kültür için bir NumberFormatInfo nesnesini örnekleme

Sabit kültür, kültüre duyarlı olmayan bir kültürü temsil eder. İngilizce diline dayalıdır ancak İngilizce konuşan herhangi bir ülkeyi/bölgeyi temel alan bir dil değildir. Belirli kültürlerin verileri dinamik olabilir ve yeni kültürel kuralları veya kullanıcı tercihlerini yansıtacak şekilde değişebilir, ancak sabit kültürün verileri değişmez. Sabit kültürün biçimlendirme kurallarını temsil eden bir nesne, sonuç dizelerinin kültüre göre değişmey edeceği biçimlendirme NumberFormatInfo işlemleri için kullanılabilir.

Sabit kültürün biçimlendirme kurallarını temsil eden bir nesneyi NumberFormatInfo aşağıdaki yollarla örnekleyebilirsiniz:

Aşağıdaki örnek, sabit kültürü temsil eden bir nesne örneği NumberFormatInfo için bu yöntemlerin her birini kullanır. Ardından nesnenin salt okunur olup olmadığını gösterir,

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

Belirli bir kültür için bir NumberFormatInfo nesnesini örnekleme

Belirli bir kültür, belirli bir ülkede/bölgede konuşulan bir dili temsil eder. Örneğin, en-US, Birleşik Devletler dilinde konuşulan İngilizce dili temsil eden belirli bir kültürdür ve en-CA, Kanada'da konuşulan İngilizce dili temsil eden belirli bir kültürdür. Belirli bir kültürün NumberFormatInfo biçimlendirme kurallarını temsil eden bir nesne örneğini aşağıdaki yollarla oluşturabilirsiniz:

Aşağıdaki örnek, Endonezya (Endonezya) kültürünün biçimlendirme kurallarına yansıtan bir nesne oluşturmak NumberFormatInfo için bu dört yolu kullanır. Ayrıca her nesnenin salt okunur olup olmadığını gösterir.

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

Bağımsız kültür için bir NumberFormatInfo nesnesini örnekleme

Nötr kültür, bir ülkede/bölgeden bağımsız bir kültürü veya dili temsil eder. Genellikle bir veya daha fazla belirli kültürün üst öğesidir. Örneğin fr, Fransızca dili ve fr-FR kültürünün üst öğesi için nötr bir kültürdür. Bağımsız bir kültürün biçimlendirme kurallarına, belirli bir kültürün biçimlendirme kurallarını temsil eden bir nesne oluşturmakla aynı şekilde NumberFormatInfo NumberFormatInfo bir nesnesi oluştururuz.

Not

önceki .NET Framework 3.5 ve önceki sürümlerde, nötr kültürün biçimlendirme kurallarına yansıtan bir nesne almaya NumberFormatInfo çalışırken bir özel durum NotSupportedException oluşturur.

Ancak, belirli bir ülkede/bölgeden bağımsız olduğundan, bağımsız bir kültürde kültüre özgü biçimlendirme bilgileri eksiktir. nesnesini genel değerlerle doldurmak yerine .NET Framework, bağımsız kültürün alt parçası olan belirli bir kültürün biçimlendirme kurallarına yansıtan bir NumberFormatInfo NumberFormatInfo nesne döndürür. Örneğin, nötr en kültürünün nesnesi en-US kültürünün biçimlendirme kuralları ve fr kültürü için nesne fr-FR kültürünün biçimlendirme kuralları NumberFormatInfo NumberFormatInfo yansıtıyor.

Her bağımsız kültürün hangi belirli kültürün biçimlendirme kurallarını temsil ettiğini belirlemek için aşağıdaki gibi bir kod kullanabilirsiniz.

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.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 ve dinamik veriler

Sınıf tarafından sağlanan sayısal değerleri biçimlendirmeye yönelik kültüre özgü veriler, aynı sınıf tarafından sağlanan NumberFormatInfo kültürel veriler gibi CultureInfo dinamiktir. Belirli nesnelerle ilişkili nesneler için değerlerin kararlılığı NumberFormatInfo hakkında hiçbir varsayımda bulunmamaması CultureInfo gerekir. Yalnızca sabit kültür ve ilişkili nesnesi tarafından sağlanan NumberFormatInfo veriler kararlıdır. Diğer veriler, aşağıdaki nedenlerle uygulama oturumları arasında veya tek bir oturumda bile değişebilir:

  • Sistem güncelleştirmeleri. Para birimi simgesi veya para birimi biçimleri gibi kültürel tercihler zaman içinde değişir. Bu durumda, Windows Update belirli bir kültürün NumberFormatInfo özellik değerinde değişiklikler içerir.

  • Değiştirme kültürleri. sınıfı, CultureAndRegionInfoBuilder var olan bir kültürün verilerini değiştirmek için kullanılabilir.

  • Özellik değerlerine basamaklı değişiklikler. Çalışma zamanında kültürle ilgili bir dizi özellik değişebilir ve bu da verilerin NumberFormatInfo değişmesini sağlar. Örneğin, geçerli kültür program aracılığıyla veya kullanıcı eylemi aracılığıyla değiştirilebilir. Bu durumda, özelliği NumberFormatInfo tarafından döndürülen nesne geçerli CurrentInfo kültürle ilişkili bir nesne olarak değişir.

  • Kullanıcı tercihleri. Uygulama kullanıcılarının geçerli sistem kültürüyle ilişkilendirilmiş bazı değerleri, uygulamanın bölge ve dil seçenekleri aracılığıyla geçersiz k Denetim Masası. Örneğin, kullanıcılar farklı bir para birimi simgesi veya farklı bir ondalık ayırıcı simgesi seçebilir. Özellik CultureInfo.UseUserOverride olarak ayarlanırsa true (varsayılan değeri), nesnenin NumberFormatInfo özellikleri de kullanıcı ayarlarından alınır.

2.0 .NET Framework başlayarak, nesne oluşturulduğunda bir nesnenin tüm kullanıcı tarafından NumberFormatInfo geçersiz kılınabilir özellikleri başlatılır. Nesne oluşturma veya kullanıcı geçersiz kılma işlemi atomik olduğundan ve nesne oluşturma sırasında ilgili değerler değişebli olduğu için yine de tutarsızlık olasılığı vardır. Ancak bu tutarsızlıklar son derece nadirdir.

Kullanıcı geçersiz kılmaların geçerli kültürle aynı kültürü NumberFormatInfo temsil eden nesnelere yansıtıp yansıtılamadığını kontrol edersiniz. Aşağıdaki tabloda, bir nesnenin alınıp alınama yolları liste ve sonuçta elde edilen nesnenin kullanıcı geçersiz NumberFormatInfo kılmalarını yansıtıp yansıtmadığını gösterir.

CultureInfo ve NumberFormatInfo nesnesinin kaynağı Kullanıcı geçersiz kılmalarını yansıtır
CultureInfo.CurrentCulture.NumberFormat özelliði Yes
NumberFormatInfo.CurrentInfo özelliði Yes
CultureInfo.CreateSpecificCulture yöntemi Yes
CultureInfo.GetCultureInfo yöntemi No
CultureInfo(String) constructor Yes
CultureInfo.CultureInfo(String, Boolean) constructor Parametrenin değerine bağlıdır useUserOverride

Bunu yapmak için etkileyici bir neden olmadıkça, NumberFormatInfo Kullanıcı girişini biçimlendirmek ve ayrıştırmak ya da sayısal verileri göstermek için istemci uygulamalarında nesnesini kullandığınızda Kullanıcı geçersiz kılmalara dikkat etmelisiniz. Sunucu uygulamaları veya katılımsız uygulamalar için, Kullanıcı geçersiz kılmalarını dikkate almalısınız. Ancak, NumberFormatInfo nesneyi dize biçiminde kalıcı olarak veya örtük olarak bir biçimde kalıcı hale getirmek için kullanıyorsanız, NumberFormatInfo sabit kültürün biçimlendirme kurallarını yansıtan bir nesne kullanmanız ya da kültürden bağımsız olarak kullandığınız özel bir sayısal biçim dizesi belirtmeniz gerekir.

IFormatProvider, NumberFormatInfo ve sayısal biçimlendirme

Bir NumberFormatInfo nesne, tüm sayısal biçimlendirme işlemlerinde örtük veya açık olarak kullanılır. Bunlar aşağıdaki yöntemlere çağrılar içerir:

Tüm sayısal biçimlendirme işlemleri bir IFormatProvider uygulamayı kullanır. IFormatProviderArabirim tek bir yöntemi içerir GetFormat(Type) . Bu, Type biçimlendirme bilgilerini sağlamak için gereken türü temsil eden bir nesnesi geçen bir geri çağırma yöntemidir. Yöntemi, bu türün bir örneğini döndürmekten veya null türün bir örneğini sağlayabilmesinden sorumludur. .NET Framework, IFormatProvider biçimlendirme numaraları için iki uygulama sağlar:

Bir IFormatProvider uygulama bir biçimlendirme yöntemine açıkça sağlanmazsa, CultureInfo CultureInfo.CurrentCulture geçerli kültürü temsil eden özelliği tarafından döndürülen bir nesne kullanılır.

Aşağıdaki örnek, IFormatProvider NumberFormatInfo özel bir uygulama tanımlayarak biçimlendirme işlemlerinde arabirimi ve sınıfı arasındaki ilişkiyi gösterir IFormatProvider . GetFormatYöntemi, biçimlendirme işlemi tarafından istenen nesnenin tür adını görüntüler. Arabirim bir NumberFormatInfo nesne istiyorsa, bu yöntem NumberFormatInfo geçerli kültür için nesne sağlar. Örneğin çıkışının gösterdiği gibi Decimal.ToString(IFormatProvider) yöntemi, NumberFormatInfo biçimlendirme bilgilerini sağlamak için bir nesne ister, String.Format(IFormatProvider, String, Object[]) Yöntem NumberFormatInfo de ister ve DateTimeFormatInfo nesneler de bir ICustomFormatter uygulama.

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

Bir IFormatProvider uygulama bir sayısal biçimlendirme yöntemi çağrısında açıkça sağlanmazsa, yöntemi, CultureInfo.CurrentCulture.GetFormat NumberFormatInfo geçerli kültüre karşılık gelen nesneyi döndüren yöntemini çağırır.

Biçim dizeleri ve NumberFormatInfo özellikleri

Her biçimlendirme işlemi bir sayıdan sonuç dizesi üretmek için standart veya özel bir sayısal biçim dizesi kullanır. Bazı durumlarda, bir sonuç dizesi üretmek için bir biçim dizesinin kullanılması aşağıdaki örnekte olduğu gibi açıktır. Bu kod, Decimal.ToString(IFormatProvider) Decimal en-US kültürün biçimlendirme kurallarını kullanarak bir değeri farklı dize temsillerine dönüştürmek için yöntemini çağırır.

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

Diğer durumlarda, bir biçim dizesinin kullanımı örtük bir şekilde gerçekleştirilir. Örneğin, aşağıdaki yöntem varsayılan veya parametresiz metoda çağrı yaparken Decimal.ToString() , Decimal Örneğin değeri genel ("G") Biçim belirleyicisi ve geçerli kültürün kuralları kullanılarak biçimlendirilir ve bu durumda en-US kültürü kullanılır.

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

Her standart sayısal biçim dizesi, bir veya daha fazla özelliği kullanarak, bir veya daha fazla özellik kullanır ve NumberFormatInfo sonuç dizesinde kullanılan sembolleri veya sembolleri belirlemektir. Benzer şekilde, "0" ve "#" dışındaki her bir özel sayısal biçim belirticisi, Özellikler tarafından tanımlanan sonuç dizesinde semboller ekler NumberFormatInfo . Aşağıdaki tabloda standart ve özel sayısal biçim belirticileri ve bunlarla ilişkili NumberFormatInfo özellikler listelenmiştir. Belirli bir kültürün sonuç dizesinin görünümünü değiştirmek için NumberFormatInfo özelliklerini değiştirme bölümüne bakın. Bu biçim Belirticilerinin kullanımı hakkındaki ayrıntılar için bkz. Standart sayısal biçim dizeleri ve özel sayısal biçim dizeleri.

Biçim belirteci İlişkili özellikler
"C" veya "c" (para birimi biçim Belirleyicisi) CurrencyDecimalDigits, varsayılan kesirli basamak sayısını tanımlamak için.

CurrencyDecimalSeparatorondalık ayırıcı sembolünü tanımlamak için.

CurrencyGroupSeparatorgrubunu veya binlik ayırıcısını tanımlamak için.

CurrencyGroupSizes, integral gruplarının boyutlarını tanımlamak için.

CurrencyNegativePatternnegatif para birimi değerlerinin modelini tanımlamak için.

CurrencyPositivePattern, pozitif para birimi değerlerinin modelini tanımlamak için.

CurrencySymbol, para birimi simgesini tanımlamak için.

NegativeSigneksi işareti simgesini tanımlamak için.
"D" veya "d" (ondalık biçim Belirleyicisi) NegativeSigneksi işareti simgesini tanımlamak için.
"E" veya "e" (üs veya bilimsel Biçim Belirleyicisi) NegativeSign, Mantis ve üs içindeki negatif işaret sembolünü tanımlamak için.

NumberDecimalSeparatorondalık ayırıcı sembolünü tanımlamak için.

PositiveSign, üs içinde pozitif işaret sembolünü tanımlamak için.
"F" veya "f" (sabit noktalı Biçim Belirleyicisi) NegativeSigneksi işareti simgesini tanımlamak için.

NumberDecimalDigits, varsayılan kesirli basamak sayısını tanımlamak için.

NumberDecimalSeparatorondalık ayırıcı sembolünü tanımlamak için.
"G" veya "g" (Genel Biçim Belirleyicisi) NegativeSigneksi işareti simgesini tanımlamak için.

NumberDecimalSeparatorondalık ayırıcı sembolünü tanımlamak için.

PositiveSign, üstel biçimde sonuç dizeleri için artı işareti sembolünü tanımlamak için.
"N" veya "n" (sayı Biçim Belirleyicisi) NegativeSigneksi işareti simgesini tanımlamak için.

NumberDecimalDigits, varsayılan kesirli basamak sayısını tanımlamak için.

NumberDecimalSeparatorondalık ayırıcı sembolünü tanımlamak için.

NumberGroupSeparator, Grup ayırıcısı (binlerce) sembolünü tanımlamak için.

NumberGroupSizes, bir gruptaki integral basamak sayısını tanımlamak için.

NumberNegativePatternnegatif değerlerin biçimini tanımlamak için.
"P" veya "p" (yüzde Biçim Belirleyicisi) NegativeSigneksi işareti simgesini tanımlamak için.

PercentDecimalDigits, varsayılan kesirli basamak sayısını tanımlamak için.

PercentDecimalSeparatorondalık ayırıcı sembolünü tanımlamak için.

PercentGroupSeparator, Grup ayırıcı sembolünü tanımlamak için.

PercentGroupSizes, bir gruptaki integral basamak sayısını tanımlamak için.

PercentNegativePattern, yüzde sembolünün yerleşimini ve negatif değerler için negatif sembolü tanımlamak için.

PercentPositivePattern, pozitif değerler için yüzde sembolünün yerleşimini tanımlamak için.

PercentSymbol, yüzde simgesini tanımlamak için.
"R" veya "r" (gidiş dönüş Biçim Belirleyicisi) NegativeSigneksi işareti simgesini tanımlamak için.

NumberDecimalSeparatorondalık ayırıcı sembolünü tanımlamak için.

PositiveSign, bir üs içinde pozitif işaret sembolünü tanımlamak için.
"X" veya "x" (onaltılı Biçim Belirleyicisi) Yok.
"." (Decimal Point özel biçim Belirleyicisi) NumberDecimalSeparatorondalık ayırıcı sembolünü tanımlamak için.
"," (Grup ayırıcı özel biçim Belirleyicisi) NumberGroupSeparator, Grup (binlerce) ayırıcı sembolünü tanımlamak için.
"%" (yüzde yer tutucu özel biçim belirleyicisi) PercentSymbol, yüzde sembolünü tanımlamak için.
"ortalama" (binde bir yer tutucu özel biçim belirleyicisi) PerMilleSymbol, binlik sembolünü tanımlamak için.
"E" (üstel nota özel biçim belirleyicisi) NegativeSign, mantiste ve üste negatif işaret simgesini tanımlamak için.

PositiveSign, üsde pozitif işaret simgesini tanımlamak için.

sınıfının, NumberFormatInfo belirli bir kültür NativeDigits tarafından kullanılan temel 10 basamamayı belirten bir özelliği olduğunu unutmayın. Ancak, özelliği biçimlendirme işlemleri için kullanılmaz; Sonuç dizesinde yalnızca Temel Latin rakamlar 0 (U+0030) ile 9 (U+0039) arasında kullanılır. Ayrıca, ve , ve değerleri için sonuç dizesi sırasıyla , ve özellikleri tarafından tanımlanan sembollerden Single Double NaN PositiveInfinity NegativeInfinity NaNSymbol PositiveInfinitySymbol NegativeInfinitySymbol oluşur.

NumberFormatInfo özelliklerini değiştirme

Sayısal biçimlendirme işlemiyle üretilen NumberFormatInfo sonuç dizesini özelleştirmek için bir nesnenin özelliklerini değiştirebilirsiniz. Bunu yapmak için:

  1. Biçimlendirme kuralları değiştirmek istediğiniz bir NumberFormatInfo nesnenin okuma/yazma kopyasını oluşturun. Daha fazla bilgi için NumberFormatInfo nesnesi örneği oluşturma bölümüne bakın.

  2. İstenen sonuç dizesini üretmek için kullanılan özelliği veya özellikleri değiştirin. Biçimlendirme yöntemlerinin sonuç dizelerini tanımlamak için özellikleri nasıl kullanabileceği hakkında bilgi NumberFormatInfo için, Dizeleri biçimlendirme ve NumberFormatInfo özellikleri bölümüne bakın.

  3. Biçimlendirme yöntemlerine NumberFormatInfo yapılan IFormatProvider çağrılarda bağımsız değişken olarak özel nesneyi kullanın.

Not

Bir uygulama her başlatıldığında bir kültürün özellik değerlerini dinamik olarak değiştirmek yerine sınıfını kullanarak özel bir kültür (benzersiz bir adı olan ve var olan kültürleri tamamlar) ya da bir değiştirme kültürü (belirli bir kültür yerine kullanılan CultureAndRegionInfoBuilder bir kültür) tanımlayabilirsiniz.

Aşağıdaki bölümlerde bazı örnekler verilmiştir.

Para birimi simgesini ve desenini değiştirme

Aşağıdaki örnek, NumberFormatInfo en-US kültürünün biçimlendirme kurallarını temsil eden bir nesneyi değiştiriyor. Özelliğine ISO-4217 para birimi sembolünü atar ve ardından boşluk ve sayısal bir değer gelen para birimi sembolünü içeren para birimi değerleri için bir CurrencySymbol desen tanımlar.

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

Ulusal kimlik numarası biçimlendirme

Birçok ulusal kimlik numarası yalnızca rakamlardan oluşur ve bu nedenle bir nesnenin özellikleri değiştirerek kolayca NumberFormatInfo biçimlendirebilirsiniz. Örneğin, aşağıdaki gibi düzenlenmiş Birleşik Devletler sosyal güvenlik numarası 9 basamak içerir: XXX-XX-XXXX . Aşağıdaki örnekte sosyal güvenlik numaralarının tamsayı değerleri olarak depolandığı ve bunları uygun şekilde biçimlemektedir.

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

Sayısal dizeleri ayrıştırma

Ayrıştırma, bir say ın dize gösterimini bir sayıya dönüştürmeyi içerir. Dosyanın her sayısal .NET Framework iki aşırı yüklenmiş ayrıştırma yöntemi içerir: Parse ve TryParse . yöntemi Parse bir dizeyi sayıya dönüştürür ve dönüştürme başarısız olursa bir özel durum oluşturur. yöntemi bir dizeyi sayıya dönüştürür, sedyeyi bir bağımsız değişkene atar ve dönüştürmenin başarılı olup TryParse olmadığını belirten bir değer out Boolean döndürür.

Ayrıştırma işlemi başarılı olacaksa, hangi stil öğelerinin (grup ayırıcıları, ondalık ayırıcı veya para birimi simgesi gibi) mevcut olduğunu belirlemek için ayrıştırma yöntemleri örtülü olarak veya açıkça bir numaralama değeri NumberStyles kullanır. Yöntem çağrısında bir değer sağlanmazsa, varsayılan değer ve bayraklarını içeren bir değerdir. Ayrıştırılan dizenin grup simgelerini, ondalık ayırıcıyı, negatif işareti ve boşluk karakterlerini içerebilir veya bir sayın üstel gösterimdeki dize gösterimi NumberStyles NumberStyles Float AllowThousands olabilir.

Ayrıştırma yöntemleri, ayrıştırılama dizesinde meydana gelen belirli sembolleri ve desenleri tanımlayan bir nesneyi de örtülü olarak veya NumberFormatInfo açıkça kullanır. Bir NumberFormatInfo nesne sağlanmazsa, geçerli kültür NumberFormatInfo için varsayılan değeridir. Ayrıştırma hakkında daha fazla bilgi için , ve gibi tek tek ayrıştırma Int16.Parse(String) Int32.Parse(String, NumberStyles) Int64.Parse(String, IFormatProvider) Decimal.Parse(String, NumberStyles, IFormatProvider) Double.TryParse(String, Double) yöntemlerine BigInteger.TryParse(String, NumberStyles, IFormatProvider, BigInteger) bakın.

Aşağıdaki örnek, dizeleri ayrıştırmanın kültüre duyarlı doğasını göstermektedir. En-US, fr-FR ve sabit kültürlerin kuralları kullanarak binlik ayıracı içeren bir dizeyi ayrıştırmaya çalışır. Grup ayırıcısı olarak virgülü ve ondalık ayırıcısı olarak noktayı içeren bir dize fr-FR kültüründe ayrıştırılamaz ve boş alana sahip bir dize grup ayırıcısı ve ondalık ayırıcı olarak virgül en-US ve sabit kültürlerde ayrıştırılamaz.

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)

Ayrıştırma genellikle iki bağlamda gerçekleşir:

  • Kullanıcı girişini sayısal bir değere dönüştürmek için tasarlanmış bir işlem olarak.

  • Sayısal bir değeri gidiş dönüş yapmak için tasarlanmış bir işlem olarak; başka bir ifadeyle, daha önce dize olarak seri hale getirilene sayısal bir değeri seri halinden etmek için.

Aşağıdaki bölümlerde bu iki işlem daha ayrıntılı olarak açıklanmaktadır.

Kullanıcı dizelerini ayrıştırma

Kullanıcı tarafından sayısal dizeleri ayrıştırıyorken, her zaman kullanıcının kültürel ayarlarını yansıtan bir NumberFormatInfo nesne örneği oluşturmalısiniz. Kullanıcı özelleştirmelerini yansıtan bir nesne örneği oluşturma hakkında bilgi için NumberFormatInfo NumberFormatInfo ve dinamik veri bölümüne bakın.

Aşağıdaki örnek, kullanıcı kültürel ayarlarını yansıtan ayrıştırma işlemi ile yansıtmayan bir ayrıştırma işlemi arasındaki farkı göstermektedir. Bu durumda, varsayılan sistem kültürü en-US'tir, ancak kullanıcı ondalık simgesi olarak "," ve Denetim Masası, Region ve Language içinde grup ayırıcısı olarak "." tanımladı. Normalde, bu semboller varsayılan en-US kültüründe tersine çevrilir. Kullanıcı kullanıcı ayarlarını yansıtan bir dize girerken ve dize aynı zamanda kullanıcı ayarlarını (geçersiz kılmalar) yansıtan bir nesne tarafından ayrıştırıldıysa, ayrıştırma işlemi doğru NumberFormatInfo bir sonuç döndürür. Ancak, dize standart en-US kültürel ayarlarını yansıtan bir nesne tarafından ayrıştırıldı, grup ayırıcısı için virgül sembolünü yanlış yapar ve NumberFormatInfo yanlış bir sonuç döndürür.

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

Sayısal verileri serileştirme ve seri durumundan çıkarma

Sayısal veriler dize biçiminde serileştirilmiş ve daha sonra seri durumdan kaldırılan ve ayrıştırılan, dizeler sabit kültürün kuralları kullanılarak oluşturularak ayrıştırıldı. Biçimlendirme ve ayrıştırma işlemleri hiçbir zaman belirli bir kültürün kurallarını yansıtmaz. Kültüre özgü ayarlar kullanılıyorsa verilerin taşınabilirliği kesinlikle sınırlıdır; yalnızca kültüre özgü ayarları serileştirilmiş iş parçacığının ayarlarıyla aynı olan bir iş parçacığında başarıyla seri halinden kaldırabilirsiniz. Bazı durumlarda bu, verilerin seri hale getirilene aynı sistemde başarıyla seri durumdan kaldırılamayacakları anlamına gelir.

Aşağıdaki örnek, bu ilke ihlal edildiklerde neler olacağını göstermektedir. Bir dizide kayan nokta değerleri, geçerli iş parçacığı en-US kültürünün kültüre özgü ayarlarını kullandığında dizelere dönüştürülür. Veriler daha sonra pt-BR kültürünün kültüre özgü ayarlarını kullanan bir iş parçacığı tarafından ayrıştırıldı. Bu durumda, her ayrıştırma işlemi başarılı olsa da, veriler başarıyla gidiş dönüş olmaz ve veri bozulması oluşur. Diğer durumlarda, ayrıştırma işlemi başarısız olabilir ve FormatException bir özel durum ortaya çıktı.

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

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

      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("pt-BR");
      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()
      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
      PersistData()
      
      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("pt-BR")
      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

Oluşturucular

NumberFormatInfo()

Sınıfının kültürden bağımsız NumberFormatInfo (sabit) yeni bir yazılabilir örneğini başlatılır.

Özellikler

CurrencyDecimalDigits

Para birimi değerlerinde kullanmak üzere ondalık basamak sayısını alır veya ayarlar.

CurrencyDecimalSeparator

Para birimi değerlerde ondalık ayırıcı olarak kullanmak üzere dizeyi alır veya ayarlar.

CurrencyGroupSeparator

Basamak gruplarını para birimi değerlerde ondalık ayırıcının sol tarafından ayıran dizeyi alır veya ayarlar.

CurrencyGroupSizes

Her gruptaki basamak sayısını, para birimi değerlerde ondalık değerin solunda alır veya ayarlar.

CurrencyNegativePattern

Negatif para birimi değerlerinin biçim desenini alır veya ayarlar.

CurrencyPositivePattern

Pozitif para birimi değerlerinin biçim desenini alır veya ayarlar.

CurrencySymbol

Para birimi simgesi olarak kullanmak üzere dizeyi alır veya ayarlar.

CurrentInfo

Değerleri geçerli kültüre NumberFormatInfo göre biçime alan salt okunur bir alır.

DigitSubstitution

Grafik Kullanıcı arabiriminin bir basamak şeklini nasıl görüntülediğini belirten bir değer alır veya ayarlar.

InvariantInfo

NumberFormatInfoKültüre bağımsız (Sabit) bir salt okuma nesnesi alır.

IsReadOnly

Bu nesnenin salt okunurdur olup olmadığını gösteren bir değer alır NumberFormatInfo .

NaNSymbol

IEEE NaN (sayı değil) değerini temsil eden dizeyi alır veya ayarlar.

NativeDigits

0 ile 9 arasındaki Batı rakamlarının eşdeğeri olan yerel basamakların dize dizisini alır veya ayarlar.

NegativeInfinitySymbol

Negatif sonsuzu temsil eden dizeyi alır veya ayarlar.

NegativeSign

İlişkili sayının negatif olduğunu belirten dizeyi alır veya ayarlar.

NumberDecimalDigits

Sayısal değerlerde kullanılacak ondalık basamak sayısını alır veya ayarlar.

NumberDecimalSeparator

Sayısal değerlerde ondalık ayırıcı olarak kullanılacak dizeyi alır veya ayarlar.

NumberGroupSeparator

Sayısal değerlerde ondalık basamak gruplarının solunda bulunan basamak gruplarını ayıran dizeyi alır veya ayarlar.

NumberGroupSizes

Her gruptaki basamak sayısını sayısal değerlerde ondalık ayırıcının solunda alır veya ayarlar.

NumberNegativePattern

Negatif sayısal değerler için biçim desenini alır veya ayarlar.

PercentDecimalDigits

Yüzde değerlerinde kullanmak üzere ondalık basamak sayısını alır veya ayarlar.

PercentDecimalSeparator

Yüzde değerlerde ondalık ayırıcı olarak kullanmak üzere dizeyi alır veya ayarlar.

PercentGroupSeparator

Basamak gruplarını yüzde değerlerde ondalık ayırıcının sol tarafından ayıran dizeyi alır veya ayarlar.

PercentGroupSizes

Her gruptaki basamak sayısını yüzde değerleri ondalık değerlerinin solunda alır veya ayarlar.

PercentNegativePattern

Negatif yüzde değerleri için biçim desenini alır veya ayarlar.

PercentPositivePattern

Pozitif yüzde değerlerinin biçim stilini alır veya ayarlar.

PercentSymbol

Yüzde simgesi olarak kullanılacak dizeyi alır veya ayarlar.

PerMilleSymbol

Frele başına simge olarak kullanılacak dizeyi alır veya ayarlar.

PositiveInfinitySymbol

Pozitif sonsuz temsil eden dizeyi alır veya ayarlar.

PositiveSign

İlişkili sayının pozitif olduğunu belirten dizeyi alır veya ayarlar.

Yöntemler

Clone()

Nesnesinin basit bir kopyasını NumberFormatInfo oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetFormat(Type)

Belirtilen türde bir sayı biçimlendirme hizmeti sağlayan bir nesne alır.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetInstance(IFormatProvider)

NumberFormatInfoBelirtilen ile ilişkili öğesini alır IFormatProvider .

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ReadOnly(NumberFormatInfo)

Salt-bir sarmalayıcı döndürür NumberFormatInfo .

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.