Mise en forme des données numériques pour une culture spécifique
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 "en-US" et 10.000,50 pour la culture "de-DE".
Une instance de la classe NumberFormatInfo peut être créée pour une culture spécifique ou pour la culture invariante, mais 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 vous tentez de créer une instance de NumberFormatInfo pour une culture neutre.
L'exemple de code suivant affiche un entier en utilisant le format monétaire standard NumberFormatInfo ("c") pour la culture CurrentCulture spécifiée.
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 qui ont adopté l'euro comme monnaie commune. 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 à travers les options régionales et linguistiques (Paramètres régionaux ou Options régionales) 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é sur le système de l'utilisateur. S'ils ne mettent pas à jour le paramétrage de la monnaie en spécifiant l'euro dans les Options régionales ou les Paramètres régionaux du Panneau de configuration, les utilisateurs des pays membres de la zone euro 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. Créez CultureInfo en utilisant l'une des surcharges de son constructeur qui accepte un paramètre useUserOverride et affectez à ce paramètre la valeur false. Ceci 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 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 "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") sera utilisé. La méthode de serveur Web XML OverrideUserSetting
, quant à elle, définit la culture CurrentCulture comme "fr-FR" en utilisant le constructeur CultureInfo qui accepte un paramètre useUserOverride, et affecte à ce paramètre la valeur false. Cette méthode retourne, elle aussi, un entier présenté sous forme de montant monétaire. Dans ce cas toutefois, 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.
<%@ 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. Si vous voulez être sûr que votre application utilise les paramètres par défaut du .NET Framework, vous devez créer un objet CultureInfo et lui passer un paramètre useUserOverride auquel vous avez affecté 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 culture est définie comme "fr-FR" à l'aide du constructeur CultureInfo qui accepte un paramètre useUserOverride dont la valeur est 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é.
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