Sdílet prostřednictvím


Formátování číselných dat pro konkrétní jazykovou verzi

Třída NumberFormatInfo definuje, jak jsou na základě jazykové verze, formátovány a zobrazeny měna, oddělovače desetinných míst a jiné číselné symboly. Například desetinné číslo 10000.50 je formátováno jako 10,000.50 pro jazykovou verzi Angličtina (Spojené státy) "en-US" a jako 10.000,50 pro jazykovou verzi Němčina (Německo) "de-DE".

Objekt NumberFormatInfo může být vytvořen pro konkrétní jazykovou verzi nebo invariantní jazykovou verzi, ale ne pro neutrální jazykovou verzi. Neutrální jazyková verze neposkytuje dostatek informací pro zobrazení správného číselného formátu. Pokud se aplikace pokusí vytvořit objekt NumberFormatInfo s použitím neutrální jazykové verze, je vyvolána výjimka.

Následující příklad kódu zobrazuje celé číslo pomocí NumberFormatInfo standardního formátu měny ("c") pro aktuální jazykovou verzi.

Imports System
Imports System.Globalization

Public Class TestClass

   Public Shared Sub Main()
      Dim i As Integer = 100
      
      ' Creates a CultureInfo for English in Belize.
      Dim bz As New CultureInfo("en-BZ")
      ' Displays i formatted as currency for the bz.
      Console.WriteLine(i.ToString("c", bz))
      
      ' Creates a CultureInfo for English in the U.S.
      Dim us As New CultureInfo("en-US")
      ' Displays i formatted as currency for us.
      Console.WriteLine(i.ToString("c", us))
      
      ' Creates a CultureInfo for Danish in Denmark.
      Dim dk As New CultureInfo("da-DK")
      ' Displays i formatted as currency for dk.
      Console.WriteLine(i.ToString("c", dk))
   End Sub
End Class
using System;
using System.Globalization;

public class TestClass
{
   public static void Main()
   {
      int i = 100;
      
      // Creates a CultureInfo for English in Belize.
      CultureInfo bz = new CultureInfo("en-BZ");
      // Displays i formatted as currency for the bz.
      Console.WriteLine(i.ToString("c", bz));
      
      // Creates a CultureInfo for English in the U.S.
      CultureInfo us = new CultureInfo("en-US");
      // Display i formatted as currency for us.
      Console.WriteLine(i.ToString("c", us));
      
      // Creates a CultureInfo for Danish in Denmark.
      CultureInfo dk = new CultureInfo("da-DK");
      // Displays i formatted as currency for dk.
      Console.WriteLine(i.ToString("c", dk));
   }
}

Tento kód vytvoří následující výstup:

BZ$100.00
$100.00
kr100,00

Formátování měny pro evropské národy

Třídy CultureInfo a RegionInfo obě obsahují informace o měně. Je specifikována pouze jedna měna na jednu jazykovou verzi. Euro je oficiální měnou Belgie, Německa, Španělska, Francie, Irska, Itálie, Lucemburska, Nizozemska, Rakouska, Portugalska, Finska a Řecka. Dne 1. ledna 2002 začaly tyto národy používat eurobankovky a mince. Proto rozhraní .NET Framework a Microsoft Windows XP pro těchto dvanáct národů nastavuje jako výchozí symbol měny euro. Starší verze systému Windows stále nastavují pro tyto národy výchozí symbol měny na místní měnu.

Je třeba věnovat pozornost rozdílným výchozím symbolům měny v operačních systémech. V systému Windows mohou uživatelé přepsat některé hodnoty přidružené k výchozí jazykové verzi operačního systému prostřednictvím místního a jazykového nastavení v Ovládacích panelech. Uživatel může například vybrat zobrazení měny s použitím jiného symbolu než toho výchozího pro jazykovou verzi. Aplikace modelu Windows Forms a konzolové aplikace používají výchozí symbol měny určený v operačním systému. Uživatel v zemi nebo oblasti, která přijala euro, který ve starší verzi systému Windows neprovedl aktualizaci nastavení měny na euro pomocí místních a jazykových nastavení v Ovládacích panelech, bude mít nesprávné výchozí nastavení měny. Aplikace technologie ASP.NET a aplikace webových služeb XML vytvořené pomocí technologie ASP.NET běží jako systémové služby, nikoli jako procesy konkrétních uživatelů. Proto se jimi vracené výchozí výsledky mohou lišit od výsledků vracených aplikacemi modelu Windows Forms a konzolovými aplikacemi.

Doporučuje se psát kód, který používá výchozí nastavení měny rozhraní .NET Framework pro jazykovou verzi, aby byla aplikace chráněna od rozdílů operačních systémů a bylo zajištěno jednotné formátování měny. Aplikace by měla vytvořit objekt CultureInfo pomocí jednoho z přetížených konstruktorů, který přijímá parametr useUserOverride a nastavit tento parametr na hodnotu false. Toto nastavení způsobuje přepsání výchozího nastavení měny v operačním systému uživatele správným výchozím nastavením pro rozhraní .NET Framework.

V následujícím kódu webové služby XML nastavuje metoda UserLocalSetting vlastnost CurrentCulture na Francouzština (Francie) "fr-FR" a obdrží celé číslo ve formátu měny. Vzhledem k rozdílům mezi operačními systémy není jisté, zda je použit symbol měny euro nebo symbol "F". Metoda OverrideUserSetting webového serveru XML nastavuje vlastnost CurrentCulture na hodnotu "fr-FR" pomocí konstruktoru CultureInfo, který přijímá parametr useUserOverride s nastavením na false. Tato metoda získá celé číslo ve formátu měny. V tomto případě je zaručeno, že bude použit symbol euro, protože je v rozhraní .NET Framework výchozí.

<%@ WebService Language="VB" Class="userOverrideSample" %>

Imports System
Imports System.Web.Services
Imports System.Globalization
Imports System.Threading

Public Class userOverrideSample

   <WebMethod> _
   Public Function UserLocalSetting() As String
      Dim i As Integer = 100

      ' Sets the CurrentCulture to French in France.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")
      ' Displays i formatted as currency for the CurrentCulture.
      ' Due to operating system differences, you cannot be sure what currency
      ' symbol will be used.
      return (i.ToString("c"))
   End Function

   <WebMethod> _
   Public Function OverrideUserSetting() As String
      Dim i As Integer = 100

      ' Sets the CurrentCulture to French in France.
      ' Uses the CultureInfo constructor that takes a 
      ' useUserOverride parameter.
      ' Sets the useUserOverride value to false.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR", _
         false)
      ' Displays i formatted as currency for the CurrentCulture.
      ' This will override any user settings and display the euro symbol.
      return (i.ToString("c"))
   End Function 
End Class
<%@ WebService Language="c#" Class="userOverrideSample" %>

using System;
using System.Web.Services;
using System.Globalization;
using System.Threading;

public class userOverrideSample
{
   [WebMethod]
   public String UserLocalSetting()
   {
      int i = 100;

      // Sets the CurrentCulture to French in France.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
      // Displays i formatted as currency for the CurrentCulture.
      // Due to operating system differences, you cannot be sure what currency
      // symbol will be used.
      return (i.ToString("c"));
   }   
   
   [WebMethod]
   public String OverrideUserSetting()
   {
      int i = 100;

      // Sets the CurrentCulture to French in France.
      // Uses the CultureInfo constructor that takes a 
      // useUserOverride parameter.
      // Sets the useUserOverride value to false.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR", _
         false);
      // Displays i formatted as currency for the CurrentCulture.
      // This will override any user settings and display the euro symbol.
      return (i.ToString("c"));
   }
}

Aplikace modelu Windows Forms a konzolové aplikace běžící ve všech verzích operačních systémů Windows nastavují výchozí symbol měny z nastavení počítače. Jak již bylo zmíněno dříve, toto nastavení může být nesprávné. K zajištění použití výchozího nastavení rozhraní .NET Framework musí aplikace vytvořit objekt CultureInfo s předáním hodnoty false v parametru useUserOverride.

V následujícím příkladu je kód, který je podobný předchozímu příkladu. Nastaví jazykovou verzi na "fr-FR" a zobrazí do konzoly celé číslo ve formátu měny. K formátování měny jsou použita uživatelská místní nastavení měny. Dále je jazyková verze nastavena na hodnotu "fr-FR" pomocí konstruktoru CultureInfo, který přijímá parametr useUserOverride nastavený na hodnotu false. Číslo je poté formátováno pomocí výchozího nastavení rozhraní .NET Framework a je zobrazen symbol měny euro.

Imports System
Imports System.Globalization
Imports System.Threading

Public Class EuroSymbolSample
   Public Shared Sub Main()
      Dim i As Integer = 100
      
      ' Sets the CurrentCulture to French in France.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")
      ' Displays i formatted as currency for the CurrentCulture.
      ' On a version of Windows prior to Windows XP, where the user
      ' has not changed the default currency to euro through the
      ' Control Panel, this will default to "F".
      Console.WriteLine(i.ToString("c"))
      
      
      ' Sets the CurrentCulture to French in France, using the
      ' CultureInfo constructor that takes a useUserOverride parameter.
      ' Sets the useUserOverride value to false. 
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR", _ 
         False)
      ' Displays i formatted as default currency for the CurrentCulture.
      ' On a version of Windows prior to Windows XP, this will override an
      ' incorrect default setting of "F" and display the euro symbol ().
      Console.WriteLine(i.ToString("c"))
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class EuroSymbolSample
{
   public static void Main()
   {
      int i = 100;

      // Sets the CurrentCulture to French in France.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
      // Displays i formatted as default currency for the CurrentCulture.
      // On a version of Windows prior to Windows XP, where the user
      // has not changed the default currency to euro through the
      // Control Panel, this will default to "F".
      Console.WriteLine(i.ToString("c"));

      // Sets the CurrentCulture to French in France, using the
      // CultureInfo constructor that takes a useUserOverride parameter.
      // Sets the useUserOverride value to false. 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR", 
            false);
      // Displays i formatted as default currency for the CurrentCulture.
      // On a version of Windows prior to Windows XP, this will override an
      // incorrect default setting of "F" and display the euro symbol ().
      Console.WriteLine(i.ToString("c"));      
   }
} 

Poznámka: prostředí konzoly nepodporuje znak euro. Pokud je tento kód spuštěn v aplikaci modelu Windows Forms, zobrazí se následující výstup:

100,00 F
100,00 €

V mnoha evropských zemí se běžně používají dvě měny: euro a místní měna. Může nastat situace, kdy je nezbytné v aplikaci zobrazit obě měny. Následující příklad kódu vytvoří objekt CultureInfo pro jazykovou verzi "fr-FR", kde je výchozí měnou euro. Pokud má být zobrazen symbol měna pro místní měnu, je nutné použít metodu NumberFormatInfo.Clone k vytvoření nové instance NumberFormatInfo pro CultureInfo a nahradit výchozí symbol měny za symbol místní měny.

Imports System
Imports System.Globalization
Imports System.Threading

Public Class EuroLocalSample
   Public Shared Sub Main()
      ' Creates a CultureInfo for French in France.
      Dim FrCulture As New CultureInfo("fr-FR")
      ' Sets the CurrentCulture to fr-FR.
      Thread.CurrentThread.CurrentCulture = FrCulture
      
      ' Clones the NumberFormatInfo and creates
      ' a new object for the local currency of France.
      Dim LocalFormat As NumberFormatInfo =_
         CType(NumberFormatInfo.CurrentInfo.Clone(), NumberFormatInfo)
      ' Replaces the default currency symbol 
      ' with the local currency symbol.
      LocalFormat.CurrencySymbol = "F"
      
      Dim i As Integer = 100
      ' Displays i formatted as the local currency.
      Console.WriteLine(i.ToString("c", LocalFormat))
      
      ' Displays i formatted as the default currency.
      Console.WriteLine(i.ToString("c", NumberFormatInfo.CurrentInfo))
   End Sub
End Class 
using System;
using System.Globalization;
using System.Threading;

public class EuroLocalSample
{
   public static void Main()
   {             
      // Creates a CultureInfo for French in France.
      CultureInfo FrCulture = new CultureInfo("fr-FR");
      // Sets the CurrentCulture to fr-FR.
      Thread.CurrentThread.CurrentCulture = FrCulture;

      // Clones the NumberFormatInfo and creates
      // a new object for the local currency of France.
      NumberFormatInfo LocalFormat = 
         (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
      // Replaces the default currency symbol with the 
      // local currency symbol.
      LocalFormat.CurrencySymbol = "F";

      int i = 100;

      // Displays i formatted as the local currency.
      Console.WriteLine(i.ToString("c", LocalFormat));

      // Displays i formatted as the default currency.
      Console.WriteLine(i.ToString("c", NumberFormatInfo.CurrentInfo));
   }
}

Související příklady naleznete v části MultiCurrency Sample v Common Tasks QuickStart.

Viz také

Další zdroje

Kódování a lokalizace

Formatting Types

Formatting for Different Cultures