Ir para o conteúdo

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.