Share via


Mise en forme des données numériques pour une culture spécifique

Mise à jour : novembre 2007

La classe NumberFormatInfo définit comment les montants monétaires, les séparateurs décimaux et d'autres symboles numériques sont mis en forme et affichés en fonction de la culture. Par exemple, le nombre décimal 10000.50 est présenté sous la forme 10,000.50 pour la culture Anglais (États-Unis), « en-US » ? et 10.000,50 pour la culture Allemand (Allemagne), « de-DE ».

Un objet NumberFormatInfo ne peut être créé que pour une culture spécifique, ou pour la culture indifférente, et non pour une culture neutre. Une culture neutre ne fournit pas suffisamment d'informations pour afficher le format numérique correct. Une exception est levée si l'application essaie de créer un objet NumberFormatInfo à l'aide d'une culture neutre.

L'exemple de code suivant affiche un entier en utilisant le format monétaire standard NumberFormatInfo pour la culture actuelle.

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

Ce code génère la sortie suivante :

BZ$100.00
$100.00
kr100,00

Mise en forme des montants monétaires pour les nations de la zone euro

Les classes CultureInfo et RegionInfo incluent toutes deux des informations sur la monnaie. Une seule monnaie est spécifiée par culture. L'euro est la monnaie officielle de la Belgique, de l'Allemagne, de l'Espagne, de la France, de l'Irlande, de l'Italie, du Luxembourg, des Pays-Bas, de l'Autriche, du Portugal, de la Finlande et de la Grèce. Le 1er janvier 2002, ces pays ont commencé à utiliser l'euro sous forme de billets et de pièces de monnaie. C'est pourquoi le .NET Framework et Microsoft Windows XP définissent l'euro comme symbole monétaire par défaut pour ces douze nations. Les anciennes versions de Windows définissent toujours la monnaie locale de ces nations comme symbole monétaire par défaut.

Vous devez être conscient des différences de système d'exploitation en matière de symboles monétaires par défaut. Dans Windows, les utilisateurs ont la possibilité de substituer certaines des valeurs associées à la culture par défaut du système d'exploitation à travers les options régionales et linguistiques dans le Panneau de configuration. Par exemple, un utilisateur peut choisir d'afficher les montants monétaires avec un symbole différent du symbole par défaut de la culture. Les applications Windows Forms et console utilisent le symbole monétaire par défaut spécifié dans le système d'exploitation. Les utilisateurs des pays membres de la zone euro, ou d'une ancienne version de Windows, qui ne mettent pas à jour le paramètre monétaire via Options régionales et linguistiques du Panneau de configuration, auront une monnaie par défaut incorrecte. Les applications ASP.NET et les applications de service Web XML créées dans ASP.NET s'exécutent en tant que services système et non pour des utilisateurs spécifiques. Par conséquent, les résultats par défaut qu'elles retournent risquent de différer de ceux retournés par les applications Windows Forms et console.

Il est recommandé d'utiliser dans le code les paramètres monétaires par défaut du .NET Framework pour une culture, afin de protéger votre application contre les différences de système d'exploitation et d'assurer une mise en forme cohérente des montants monétaires. Votre application doit créer un objet CultureInfo en utilisant l'une des surcharges de son constructeur qui accepte un paramètre useUserOverride et affecter à ce paramètre la valeur false. Ceci paramètre provoque la substitution des paramètres par défaut corrects du .NET Framework aux paramètres monétaires par défaut en vigueur sur le système d'exploitation de l'utilisateur.

Dans le code de service Web XML suivant, la méthode de service Web XML UserLocalSetting affecte à la propriété CurrentCulture la valeur Français (France), « fr-FR », et retourne un entier présenté sous forme de montant monétaire. À cause de différences entre les systèmes d'exploitation, vous ne pouvez pas prédire avec certitude si le symbole de l'euro ou du franc (« F ») est utilisé. La méthode XML de serveur Web OverrideUserSetting donne à la propriété CurrentCulture la valeur « fr-FR » à l'aide du constructeur CultureInfo qui accepte un paramètre useUserOverride ayant la valeur false. Cette méthode récupère un entier mis en forme en tant que monnaie. Dans ce cas, vous êtes sûr que le symbole de l'euro sera utilisé parce qu'il s'agit du paramètre par défaut du .NET Framework.

 [Visual Basic]
<%@ 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"));
   }
}

Les applications Windows Forms et console exécutées sur toutes les versions des systèmes d'exploitation Windows définissent le symbole monétaire par défaut à partir du paramétrage en vigueur sur l'ordinateur de l'utilisateur. Comme nous l'avons mentionné plus haut, ce paramétrage peut être incorrect. Pour garantir l'utilisation des paramètres par défaut de .NET Framework, votre application doit créer un objet CultureInfo qui passe un paramètre useUserOverride ayant la valeur false.

L'exemple de code suivant est analogue au premier exemple. Il définit la culture en cours comme "fr-FR" et affiche dans la console un entier présenté sous forme de montant monétaire. Les paramètres monétaires locaux de l'utilisateur sont utilisés pour présenter le montant monétaire. Ensuite, la valeur « fr-FR » est attribuée à la culture au moyen du constructeur CultureInfo qui accepte le paramètre useUserOverride avec la valeur false. Le nombre est ensuite mis en forme en utilisant les paramètres par défaut du .NET Framework, et le symbole de l'euro est affiché.

 [Visual Basic]
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"));      
   }
} 

Notez que l'environnement console ne prend pas en charge le caractère euro. Si vous exécutez ce code dans une application Windows Forms, la sortie présente l'aspect suivant :

100,00 F
100,00 €

De nombreux pays européens utilisent deux monnaies en parallèle : l'euro et la monnaie locale. Dans certaines situations, il peut s'avérer nécessaire d'afficher les deux monnaies dans une application. L'exemple de code suivant crée un objet CultureInfo pour la culture « fr-FR », dans laquelle la monnaie par défaut est l'euro. Pour afficher le symbole monétaire de la monnaie locale, vous devez utiliser la méthode NumberFormatInfo.Clone afin de cloner un nouveau NumberFormatInfo pour CultureInfo et remplacer le symbole monétaire par défaut par un symbole monétaire local.

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

Pour voir un exemple lié à celui-ci, consultez l'exemple MultiCurrency dans Démarrage rapide pour les tâches courantes.

Voir aussi

Concepts

Mise en forme pour différentes cultures

Autres ressources

Codage et localisation

Mise en forme des types