Introdução: por que vírgulas em números não são apenas estética
\n\nImagine: você exibe na tela o salário de um funcionário — 1500000 reais. O olho se perde, zero se agarra em zero, e você conta os dígitos três vezes. Agora imagine 1,500,000 — compreensão instantânea do valor. A diferença é colossal.
No Stack Overflow, a pergunta ".NET String.Format() to add commas in thousands place for a number" acumulou dezenas de milhares de visualizações. Isso significa que desenvolvedores do mundo todo enfrentam a mesma tarefa: como formatar corretamente um número com separadores de milhares em C#. Hoje, vamos abordar todas as abordagens — desde o clássico String.Format até os recursos modernos do C#.
Se você programa em C# e trabalha com relatórios, dados financeiros ou simplesmente quer que sua interface pareça profissional — este artigo é para você. Vamos lá!
\n\nO que é String.Format() e para que serve?
\n\nString.Format() é um método estático que permite inserir valores de variáveis em uma string modelo com controle de formatação. Diferente da concatenação simples, ele oferece flexibilidade: você pode especificar exatamente como exibir o número — com separadores, com quantidade fixa de casas decimais, em formato monetário e assim por diante.
A sintaxe é simples: String.Format("{0:N}", numero), onde 0 é o índice do argumento e N é o especificador de formato. Mas o diabo, como sempre, está nos detalhes.
Método principal: String.Format com o formato "N"
\n\nA maneira mais simples e óbvia de adicionar vírgulas a um número é usar o especificador de formato "N" (de Number). Ele adiciona automaticamente separadores de milhares e define a quantidade de casas decimais (padrão: 2).
int numero = 1234567;\nstring formatado = String.Format("{0:N}", numero);\nConsole.WriteLine(formatado); // Saída: 1,234,567.00\n\n\nSe você não precisar de casas decimais, use "N0" — zero significa "zero casas decimais":
string formatado = String.Format("{0:N0}", numero);\nConsole.WriteLine(formatado); // Saída: 1,234,567\n\n\nImportante: o símbolo do separador de milhares depende da cultura atual (CultureInfo). Na localidade russa, será um espaço (1 234 567); na inglesa, uma vírgula. Se você precisar exatamente da vírgula independentemente das configurações regionais, continue lendo.
Alternativas: ToString("N") e interpolação de strings
\n\nO C# moderno oferece maneiras mais elegantes. Em vez de String.Format, você pode chamar o método ToString diretamente no número:
string formatado = numero.ToString("N0");\nConsole.WriteLine(formatado); // 1,234,567\n\n\nE se você usa C# 6 ou superior, a interpolação de strings torna o código ainda mais legível:
\n\nstring formatado = $"{numero:N0}";\nConsole.WriteLine(formatado); // 1,234,567\n\n\nA interpolação é essencialmente o mesmo String.Format, mas sintaticamente mais agradável. Ela é compilada para uma chamada de String.Format internamente, então o desempenho é idêntico.
Ajuste fino: especificadores de formato personalizados
\n\nÀs vezes, o formato interno "N" não é suficiente. Por exemplo, você precisa:
- \n
- Usar espaço em vez de vírgula \n
- Mostrar o sinal "+" para números positivos \n
- Alinhar números por largura \n
Para esses casos, existem strings de formato personalizadas. Veja como definir o separador de milhares manualmente usando o símbolo # ou 0:
int numero = 1234567;\nstring formatoPersonalizado = "#,##0";\nstring formatado = numero.ToString(formatoPersonalizado);\nConsole.WriteLine(formatado); // 1,234,567\n\n\nVamos entender o que significa "#,##0":
- \n
#— dígito opcional