Formatação para Representação de Valores Monetários
Em C#, formatar números como valores monetários é uma tarefa comum que garante que os valores sejam exibidos de forma clara e familiar para o usuário, com o símbolo da moeda e a formatação de decimal corretos.
A formatação é sensível à cultura (CultureInfo
) do sistema, o que significa que o mesmo código pode exibir R$
em um sistema configurado para o Brasil e $
em um configurado para os Estados Unidos.
Existem duas formas principais e muito simples de fazer isso.
Controlando a Precisão com o Especificador de Formato
1. Usando Interpolação de String $
A maneira mais moderna e legível de formatar valores monetários é usar a interpolação de string ($
) combinada com o especificador de formato de moeda (:C
). O C
vem de Currency (moeda).
decimal preco = 123.45m;
string mensagem = $"O preço do produto é {preco:C}";
Console.WriteLine(mensagem);
// Saída em um sistema pt-BR: O preço do produto é R$ 123,45
// Saída em um sistema en-US: O preço do produto é $123.45
2. Usando o método ToString()
Outra forma clássica é usar o método ToString()
em qualquer tipo numérico (como decimal
, double
ou int
), passando o especificador de formato C
ou N
como argumento.
double valorTotal = 1999.99;
Console.WriteLine(valorTotal.ToString("N")); // Saída em um sistema pt-BR: 1.999,99
Console.WriteLine(valorTotal.ToString("C")); // Saída em um sistema pt-BR: R$ 1.999,99
Controlando a Cultura com o método CultureInfo()
Para garantir uma formatação consistente em diferentes sistemas, você pode especificar a CultureInfo
.
using System.Globalization;
// Setando a cultura do programa (Necessário para quando for diferente da cultura do sistema)
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-BR");
decimal valor = 543.21m;
Console.WriteLine(valor);
Console.WriteLine(valor.ToString("C", new CultureInfo("en-US"))); // Saída: $543.21
Console.WriteLine(valor.ToString("C", new CultureInfo("pt-BR"))); // Saída: R$ 543,21
Essa abordagem é crucial em aplicações que precisam exibir dados para um público internacional ou garantir um padrão de saída específico, independentemente das configurações da máquina onde o código é executado.