Cadeias de Formatação Numérica

Na seção anterior aprendemos os marcadores de posição de string e dois métodos de utilização. Além dessas duas formas, o C# também suporta regras de formatação mais complexas.

Sintaxe básica dos marcadores de formato

{índice,alinhamento:formato}
1. index (índice)

Índice / variável interpolada, campo obrigatório

Marcadores numéricos tradicionais: Console.WriteLine(“{0}”, 123); insere o valor 123 na posição {0}

Interpolação de string com $"": escreva diretamente o nome da variável sem índice numérico, exemplo Console.WriteLine($”Tom is {age} years old”)

Exemplo de código

int money = 1000;
Console.WriteLine("Valor original: {0}", money);
Console.WriteLine("Formato monetário: {0:C}", money);
Console.WriteLine("Moeda alinhada à direita com 10 caracteres: |{0,10:C}|", money);Code language: JavaScript (javascript)
Valor original: 1000
Formato monetário: $1,000.00
Moeda alinhada à direita com 10 caracteres: | $1,000.00|

Versão equivalente com interpolação

int money = 500;
Console.WriteLine($"Valor original: {money}");
Console.WriteLine($"Formato monetário: {money:C}");
Console.WriteLine($"Moeda alinhada à direita com 10 caracteres: |{money,10:C}|");Code language: JavaScript (javascript)
2. alignment (alinhamento)

Especificador de alinhamento, opcional, separado por vírgula ,

Função: controlar a largura mínima da saída e o alinhamento horizontal do conteúdo

Exemplo: Console.WriteLine(“{0,10}”, 123); // Ocupa 10 posições de caractere, número alinhado à direita

Como é possível ver, existem muitos espaços em branco à esquerda do número 123. O número 10 define uma largura total de dez caracteres, ou seja, sete espaços são adicionados antes do 123 para realizar o alinhamento à direita.

Número positivo: alinhamento à direita, preenche espaços à esquerda se a largura for insuficiente Exemplo: {0,10} → largura de 10 caracteres, número à direita

Número negativo: alinhamento à esquerda, preenche espaços à direita se a largura for insuficiente Exemplo: {0,-10} → largura de 10 caracteres, número à esquerda

Vamos alterar o código da seguinte forma

Console.WriteLine("{0,-10}", 123);  // Utiliza 10 caracteres, valor negativo significa alinhamento à esquerdaCode language: JavaScript (javascript)

Os espaços vazios são difíceis de visualizar, então adicionamos barras verticais para diferenciá-los

Console.WriteLine("|{0,-10}|", 123);
Console.WriteLine("|{0,10}|", 456);Code language: JavaScript (javascript)

Com os delimitadores verticais o funcionamento fica claro: o valor 10 é uma largura fixa de 10 caracteres, números negativos alinham à esquerda, positivos à direita e os espaços não utilizados são preenchidos com caracteres de espaço.

O código equivalente com interpolação de string segue abaixo

int one = 123;
int two = 456;
Console.WriteLine($"|{one,-10}|");
Console.WriteLine($"|{two,-10}|");Code language: JavaScript (javascript)
3. format (formato)

Campo de formato, opcional, separado por dois pontos :

Controla o estilo de exibição de números: moeda, casas decimais fixas, notação científica, hexadecimal e outros.

Estrutura do campo de formato :Axx

  • : deve ficar diretamente colado ao marcador sem espaços intermediários
  • A: especificador de letra única (9 formatos padrão nativos, alguns diferenciam maiúsculas e minúsculas)
  • xx: especificador de precisão (opcional, 1 a 2 dígitos, seu significado varia conforme o caractere de formato)
// F4: formato de ponto fixo, mantém 4 casas decimais
Console.WriteLine("{0:F4}", 12.345678);

// Escrita equivalente com interpolação
Console.WriteLine($"{12.345678:F4}");Code language: JavaScript (javascript)

Veja mais exemplos práticos

double myDouble = 12.345678;
Console.WriteLine("{0,-10:G} -- Geral", myDouble);      // 12.345678 -- Geral
Console.WriteLine("{0,-10} -- Padrão", myDouble);         // 12.345678 -- Padrão
Console.WriteLine("{0,-10:F4} -- Ponto Fixo", myDouble);   // 12.3457  -- Ponto Fixo
Console.WriteLine("{0,-10:C} -- Monetário", myDouble);     // $12.35    -- Monetário
Console.WriteLine("{0,-10:E3} -- Notação Científica", myDouble);//1.235E+001 -- Notação Científica
Console.WriteLine("{0,-10:x} -- Inteiro Hexadecimal", 1194719);   // 123adf    -- Inteiro HexadecimalCode language: JavaScript (javascript)

Tabela dos 9 especificadores de formato numérico padrão

IdentificadorNomeFunçãoSignificado da precisãoExemplo de saída
C/cCurrency MoedaExibe símbolo monetário regionalizadoNúmero de casas decimais{0:C} 12,5 → $12.50
D/dDecimal Inteiro DecimalApenas para tipo int, preenche zeros à esquerdaMínimo de dígitos visíveis{0:D4} 12 → 0012
F/fFixed-point Ponto FixoQuantidade fixa de casas decimaisCasas decimais mantidas{0:F4} 12,345678 →12.3457
G/gGeneral Formato GeralTroca automaticamente ponto fixo ou notação científica, formato padrãoQuantidade de dígitos significativos{0:G4} 12,345678 →12.35
X/xHexadecimal Hexadecimal (diferencia maiúsculas/minúsculas)Saída hexadecimal, X maiúsculo, x minúsculoMínimo de dígitos visíveis{0:x} 180026 → 2bf3a
N/nNumber Número com Separador de MilharesSeparador a cada três dígitosNúmero de casas decimais{0:N2} 12345678,54321 →12,345,678.54
P/pPercent PorcentagemValor ×100 com símbolo % no finalNúmero de casas decimais{0:P2} 0,1221897 →12,22 %
R/rRound-trip Formato de Ida e VoltaPermite converter de volta ao número original sem perda de precisãoParâmetro de precisão ignorado{0:R} 1234,21897 →1234.21897
E/eScientific Notação Científica (diferencia maiúsculas/minúsculas)Formato exponencial, E maiúsculo, e minúsculoCasas decimais da mantissa{0:e4}12,3456789 →1.2346e+001

Cadeias de Formatação Numérica

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *