NumberFormatInfo Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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.
özelliğinden geçerli kültürü temsil eden bir nesneyi alarak ve CultureInfo CultureInfo.CurrentCulture nesnesini CultureInfo özelliğinden CultureInfo.NumberFormat alarak.
tarafından döndürülen NumberFormatInfo nesnesini alarak
static
(Shared
in Visual Basic) CurrentInfo özelliği.Yöntemini geçerli GetInstance kültürü temsil eden bir CultureInfo nesnesiyle çağırarak.
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:
Bir nesneyi önceki kod örneğinde gösterilen yöntemlerden herhangi birini alarak ve döndürülen NumberFormatInfo Clone nesnede yöntemini NumberFormatInfo çağırarak. Bu, özelliğinin olduğu dışında NumberFormatInfo özgün nesnenin bir kopyasını IsReadOnly
false
oluşturur.Geçerli kültürü temsil eden bir nesne oluşturmak için yöntemini çağırarak ve ardından CultureInfo.CreateSpecificCulture nesnesini almak için özelliğini CultureInfo CultureInfo.NumberFormat NumberFormatInfo kullanarak.
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:
özelliğinin değerini InvariantInfo alarak. Döndürülen NumberFormatInfo nesne salt okunur.
özelliği tarafından döndürülen CultureInfo.NumberFormat nesneden CultureInfo özelliğinin değerini CultureInfo.InvariantCulture alarak. Döndürülen NumberFormatInfo nesne salt okunur.
Parametresiz sınıf NumberFormatInfo oluşturucusu çağırarak. Döndürülen nesne NumberFormatInfo okuma/yazmadır.
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:
yöntemini CultureInfo.GetCultureInfo(String) çağırarak ve döndürülen nesnenin CultureInfo özelliğinin değerini NumberFormat alarak. Döndürülen NumberFormatInfo nesne salt okunur.
Nesnesini statik CultureInfo yönteme almak istediğiniz kültürü NumberFormatInfo temsil eden bir nesnesi GetInstance iletir. Döndürülen nesne NumberFormatInfo okuma/yazmadır.
yöntemini CultureInfo.CreateSpecificCulture çağırarak ve döndürülen nesnenin CultureInfo özelliğinin değerini NumberFormat alarak. Döndürülen nesne NumberFormatInfo okuma/yazmadır.
Sınıf oluşturucularından CultureInfo.CultureInfo birini çağırarak ve döndürülen nesnenin CultureInfo özelliğinin değerini NumberFormat alarak. Döndürülen nesne NumberFormatInfo okuma/yazmadır.
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:
, Ve gibi tüm sayısal biçimlendirme yöntemleri Int32.ToString Double.ToString Convert.ToString(Int32) .
Büyük bileşik biçimlendirme yöntemi, String.Format .
Ve gibi diğer bileşik biçimlendirme yöntemleri Console.WriteLine(String, Object[]) StringBuilder.AppendFormat(String, Object[]) .
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:
CultureInfoBelirli bir kültürü (veya belirli bir ülkede/bölgedeki belirli bir dili) temsil eden sınıfı. Sayısal biçimlendirme işleminde, CultureInfo.GetFormat yöntemi, NumberFormatInfo özelliği ile ilişkili nesneyi döndürür CultureInfo.NumberFormat .
NumberFormatInfoİlişkili kültürünün biçimlendirme kuralları hakkında bilgi sağlayan sınıfı. NumberFormatInfo.GetFormatYöntemi kendi örneğini döndürür.
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:
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.
İ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.
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) |