Freigeben über


Formatieren von numerischen Daten für eine bestimmte Kultur

Die NumberFormatInfo-Klasse legt fest, wie Währungen, Dezimaltrennzeichen und andere numerische Symbole basierend auf der Kultur formatiert und angezeigt werden. Die Dezimalzahl 10000,50 wird beispielsweise für die Kultur "en-US" als 10,000.50 und für die Kultur "de-DE" als 10.000,50 angezeigt.

Für eine bestimmte Kultur oder die nicht variante Kultur kann eine Instanz von NumberFormatInfo erstellt werden, nicht aber für eine neutrale Kultur. Eine neutrale Kultur stellt nicht genügend Informationen zur Verfügung, damit das richtige numerische Format angezeigt werden kann. Wenn Sie versuchen, eine Instanz von NumberFormatInfo mithilfe einer neutralen Kultur zu erstellen, wird eine Ausnahme ausgelöst.

Anhand des folgenden Codebeispiels wird eine Ganzzahl angezeigt, indem das standardmäßige NumberFormatInfo-Währungsformat ("c") für die angegebene CurrentCulture verwendet wird.

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));
   }
}

Dieser Code erzeugt die folgende Ausgabe:

BZ$100.00
$100.00
kr100,00

Währungsformatierung für Euroländer

Sowohl die CultureInfo-Klasse als auch die RegionInfo-Klasse enthalten Daten zu Währungen. Für jede Kultur wird nur eine Währung angegeben. Der Euro ist die offizielle Währung von Belgien, Deutschland, Spanien, Frankreich, Irland, Italien, Luxemburg, Niederlande, Österreich, Portugal, Finnland und Griechenland. Seit dem 1. Januar 2002 werden die Euroscheine und -münzen in diesen Ländern verwendet. Aus diesem Grund wurde in .NET Framework und Microsoft Windows XP für diese zwölf Länder, die den Euro als offizielle Währung verwenden, das Eurosymbol als Standardwährungssymbol festgelegt. In älteren Windows-Versionen wird das Standardwährungssymbol noch auf die lokale Währung des jeweiligen Landes festgelegt.

Sie müssen auf die Unterschiede des Betriebssystems bezüglich der Standardwährungssymbole achten. Unter Windows können Benutzer in der Systemsteuerung unter Ländereinstellungen einige Werte außer Kraft setzen, die der Standardkultur des Systems zugeordnet sind. Beispielsweise kann die Währung mit einem anderen Symbol als dem Standardsymbol für die Kultur angezeigt werden. In Windows Forms- und Konsolenanwendungen wird das Standardwährungssymbol verwendet, das im System des Benutzers angegeben wurde. Wenn ein Benutzer in einem Land bzw. einer Region, in dem der Euro die offizielle Währung ist, mit einer alten Version von Windows arbeitet, in der die Währungseinstellung in der Systemsteuerung nicht über Ländereinstellungen auf den Euro aktualisiert wurde, dann ist die Standardwährungseinstellung nicht richtig. ASP.NET-Anwendungen und in ASP.NET erstellte XML-Webdienstanwendungen werden als Systemdienste und nicht für bestimmte Benutzer ausgeführt. Daher können sich die Standardergebnisse von den Ergebnissen unterscheiden, die von Windows Forms- und Konsolenanwendungen zurückgegeben werden.

Sie sollten daher Code schreiben, der die Standardwährungseinstellungen von .NET Framework für eine Kultur verwendet, um Unterschiede zwischen der Anwendung und dem Betriebssystem zu vermeiden und eine einheitliche Währungsformatierung zu gewährleisten. Erstellen Sie eine CultureInfo mithilfe einer der zugehörigen Konstruktorüberladungen, die einen useUserOverride-Parameter akzeptiert, und legen Sie für diesen Parameter false fest. Dies führt dazu, dass die Standardwährungseinstellungen im Benutzersystem durch die richtigen .NET Framework-Standardeinstellungen außer Kraft gesetzt werden.

Im folgenden XML-Webdienstcode legt die UserLocalSetting-XML-Webdienstmethode für CurrentCulture den Wert "fr-FR" fest und gibt eine als Währung formatierte Ganzzahl zurück. Aufgrund der Unterschiede im Betriebssystem ist nicht sicher, ob das Eurosymbol oder das Symbol "F" verwendet wird. Die OverrideUserSetting-XML-Webdienstmethode legt für CurrentCulture den Wert "fr-FR" fest, indem der CultureInfo-Konstruktor verwendet wird, der einen useUserOverride-Parameter akzeptiert, und legt für diesen Parameter den Wert false fest. Es wird eine als Währung formatierte Ganzzahl zurückgegeben. Es wird gewährleistet, dass das Euro-Symbol verwendet wird, da es sich hierbei um den .NET Framework-Standard handelt.

<%@ 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"));
   }
}

Windows Forms- und Konsolenanwendungen, die auf allen Versionen von Windows-Betriebssystemen ausgeführt werden, legen das Standardwährungssymbol anhand der Einstellungen des Computers des Benutzers fest. Wie bereits weiter oben erwähnt, könnte diese Einstellung falsch sein. Wenn Sie sicherstellen möchten, dass die Anwendung die .NET Framework-Standardeinstellungen verwendet, müssen Sie ein CultureInfo-Objekt erstellen, dem ein auf false festgelegter useUserOverride-Parameter übergeben wird.

Im folgenden Beispiel wird ein ähnlicher Code verwendet, wie im vorherigen Beispiel. Für die aktuelle Kultur wird "fr-FR" festgelegt und für die Konsole wird eine als Währung formatierte Ganzzahl angezeigt. Für das Format der Währung werden die lokalen Währungseinstellungen des Computers des Benutzers verwendet. Anschließend wird für die Kultur der Wert "fr-FR" festgelegt, indem der CultureInfo-Konstruktor verwendet wird, der den useUserOverride-Parameter akzeptiert, für den false festgelegt ist. Die Zahl wird dann unter Verwendung der .NET Framework-Standardeinstellungen formatiert und das Eurowährungssymbol wird angezeigt.

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"));      
   }
} 

Die Konsolenumgebung unterstützt das Eurozeichen nicht. Wenn Sie diesen Code in einer Windows Forms-Anwendung ausführen, wird Folgendes ausgegeben:

100,00 F
100,00 €

In einer Reihe von europäischen Ländern bzw. Regionen werden momentan zwei Währungen verwendet: der Euro und die lokale Währung. Möglicherweise treten daher Situationen auf, in denen die Anzeige beider Währungen in einer Anwendung erforderlich ist. Das folgende Codebeispiel erstellt ein CultureInfo-Objekt für die Kultur "fr-FR", deren Standardwährung der Euro ist. Damit das Währungssymbol für die lokale Währung verwendet wird, müssen Sie die NumberFormatInfo.Clone-Methode verwenden, um eine neue NumberFormatInfo für die CultureInfo zu klonen und das Standardwährungssymbol durch das lokale Währungssymbol zu ersetzen.

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));
   }
}

Ein ähnliches Beispiel ist das MultiCurrency-Beispiel im Schnellstart zu allgemeinen Aufgaben.

Siehe auch

Konzepte

Formatieren für unterschiedliche Kulturen

Weitere Ressourcen

Codierung und Lokalisierung
Formatierung von Typen