Formatação para Representação de Valores Percentuais
Em C#, formatar números como valores percentuais é uma tarefa comum para exibir dados como taxas de juros, descontos, ou crescimento de forma clara e padronizada. O C# oferece um especificador de formato padrão que simplifica essa conversão.
A formatação é sensível à cultura (CultureInfo
), o que significa que o resultado pode variar ligeiramente (por exemplo, no separador decimal ou no espaçamento) dependendo da configuração regional do sistema.
Controlando a Precisão com o Especificador de Formato :P
Você pode controlar o número de casas decimais exibidas adicionando um número após o P
.
P0
: Nenhuma casa decimal.P1
: Uma casa decimal.P3
: Três casas decimais.
1. Usando Interpolação de String $
A maneira mais direta e legível de formatar um número como percentual é usando a interpolação de string ($
) com o especificador de formato de porcentagem (:P
). O P
vem de Percent.
Este especificador multiplica o número por 100 e adiciona o símbolo de porcentagem (%
) no final, de acordo com a cultura atual. Por padrão, o especificador :P
exibe duas casas decimais.
double valorDecimal = 0.85;
string mensagem = $"A taxa de conclusão é {valorDecimal:P}";
Console.WriteLine(mensagem);
// Saída em um sistema pt-BR: A taxa de conclusão é 85,00%
// Saída em um sistema en-US: A taxa de conclusão é 85.00%
double desconto = 0.125;
Console.WriteLine($"Desconto de {desconto:P0}"); // Saída: Desconto de 13%
Console.WriteLine($"Desconto de {desconto:P1}"); // Saída: Desconto de 12,5%
Console.WriteLine($"Desconto de {desconto:P3}"); // Saída: Desconto de 12,500%
2. Usando o método ToString()
Outra forma clássica é usar o método ToString()
em qualquer tipo numérico, passando o especificador de formato como argumento.
decimal taxaDeJuros = 0.062m;
Console.WriteLine(taxaDeJuros.ToString("P2"));
// Saída em um sistema pt-BR: 6,20%
Controlando a Cultura com o método CultureInfo()
Para garantir uma formatação consistente em diferentes sistemas, você pode especificar a CultureInfo
. Isso afeta o separador decimal e o posicionamento do símbolo %
.
using System.Globalization;
double valor = 0.456;
var culturaUS = new CultureInfo("en-US");
Console.WriteLine(valor.ToString("P1", culturaUS)); // Saída: 45.6%
var culturaFR = new CultureInfo("fr-FR");
Console.WriteLine(valor.ToString("P1", culturaFR)); // Saída: 45,6 % (que usa espaço antes do %)
var culturaBR = new CultureInfo("pt-BR");
Console.WriteLine(valor.ToString("P1", culturaBR)); // Saída: 45,6%
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.