Formatação de dados numéricos para uma cultura específica

O NumberFormatInfo classe define como moeda, separadores decimais e outros símbolos numéricos são formatados e exibidos com base na cultura. Por exemplo, o número decimal 10000.50 é formatado como 10, 000.50 para a cultura inglês (Estados Unidos), "en-US" e 10.000,50 para a cultura alemão (Alemanha), "de-DE".

A NumberFormatInfo objeto pode ser criado para uma cultura específica, ou a cultura invariável, mas não para uma cultura neutra. Uma cultura neutra não fornece informações suficientes para exibir o formato numérico correto. Uma exceção é lançada se o aplicativo tenta criar um NumberFormatInfo usando o objeto de uma cultura neutra.

O exemplo de código a seguir exibe um número inteiro que usando o NumberFormatInfo o formato de moeda padrão ("c") para a cultura atual.

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

Esse código produz a seguinte saída:

BZ$100.00
$100.00
kr100,00

Formatação de moeda do Euro Nations

O CultureInfo e RegionInfo as duas classes incluem informações sobre moeda. Apenas uma moeda é especificada por cultura. O euro é a moeda oficial da Bélgica, Alemanha, Espanha, França, Irlanda, Itália, Luxemburgo, países baixos, Áustria, Portugal, Finlândia e Grécia. Em 1 de janeiro de 2002 essas nações iniciado usando notas bancárias de euro e moedas. Portanto, o.NET Framework e o Microsoft Windows XP definem o símbolo de moeda padrão para o euro para esses doze nations. Versões mais antigas do Windows ainda definem o símbolo de moeda padrão para moeda local para essas nações.

Você deve estar ciente das diferenças entre os símbolos de moeda padrão de sistema operacional. No Windows, os usuários são capazes de substituir alguns dos valores associados a cultura padrão do sistema operacional por meio das opções regionais e de idioma no painel de controle. Por exemplo, um usuário pode escolher exibir a moeda usando um símbolo diferente da padrão para a cultura. Windows Forms e aplicativos de console usam o símbolo de moeda padrão especificado no sistema operacional. Um usuário em um país ou região em uma versão mais antiga do Windows, que não atualizou a configuração de moeda do euro através das opções regionais e de idioma no painel de controle, de adotar o euro terá uma configuração de moeda padrão incorreto. ASP.NET e aplicativos do XML Web Services criados no ASP.NET são executados como serviços do sistema, não para usuários específicos. Portanto, os resultados do padrão que elas retornem podem diferir daqueles retornados pelo Windows Forms e aplicativos de console.

Recomenda-se que você escrever código que usa o.NET Framework configurações de moeda padrão para uma cultura para proteger o seu aplicativo de diferenças do sistema operacional e para garantir a formatação de moeda consistente. Seu aplicativo deve criar um CultureInfo de objeto usando uma das sobrecargas de construtor que aceita um useUserOverride parâmetro e definir este parâmetro false. Essa configuração faz com que a configuração de moeda padrão no sistema operacional do usuário ser substituída pela configuração padrão correto para o.NET Framework.

No seguinte código de serviço XML da Web, o UserLocalSetting conjuntos de método do XML Web service a CurrentCulture propriedade para o francês (França), "fr-FR" e recupera um número inteiro é formatado como moeda. Devido às diferenças do sistema operacional, é possível ter certeza se o símbolo do euro ou "F" símbolo é usado. O OverrideUserSetting conjuntos de método de servidor da Web em XML a CurrentCulture a propriedade como "fr-FR" usando o CultureInfo construtor que aceita um useUserOverride parâmetro com uma configuração de false. Este método recupera um número inteiro formatado como moeda. Nesse caso, são garantidas que o símbolo do euro será usado porque é o.Padrão do 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"));
   }
}

Windows Forms e aplicativos de console em execução em todas as versões dos sistemas operacionais Windows definem o símbolo de moeda padrão das configurações no computador do usuário. Como mencionado anteriormente, essa configuração pode estar incorreta. Para garantir o uso da.As configurações padrão do NET Framework, seu aplicativo deve criar um CultureInfo objeto, passando um useUserOverride parâmetro definido como false.

O exemplo a seguir usa o código que é semelhante ao exemplo anterior. Ele define a cultura atual como "fr-FR" e exibe um número inteiro para o console formatado como moeda. Configurações de moeda local do usuário são usadas para formatar a moeda. Em seguida, a cultura estiver definida como "fr-FR" usando o CultureInfo construtor que aceita o useUserOverride parâmetro definido como false. O número é formatado usando o.As configurações padrão do NET Framework e o símbolo do euro é exibido.

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

Observe que o ambiente do console não suporta o caractere do euro. Se você executar esse código em um aplicativo Windows Forms, a saída será assim:

100,00 F
100,00 €

Muitos países europeus têm duas moedas de uso comum: o euro e moeda local. Pode haver situações em que é necessário para exibir a ambas as moedas em um aplicativo. O exemplo de código a seguir cria um CultureInfo o objeto para a cultura "fr-FR" onde a moeda padrão é o euro. Para exibir o símbolo de moeda para a moeda local, você deve usar o NumberFormatInfo.Clone método para clonar um novo NumberFormatInfo para o CultureInfo e substituir o símbolo de moeda padrão com um símbolo de moeda 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));
   }
}

Para obter um exemplo relacionado, consulte o exemplo de personalisável no QuickStart de tarefas comuns.

Consulte também

Outros recursos

Codificação e localização

Formatting Types

Formatting for Different Cultures