Ir para o conteúdo

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.