String.Format

Caro(a) Leitor(a) hoje eu vou falar um pouco sobre string.format, isso porque encontrei muitos desenvolvedores com dúvidas sobre o assunto de customização de números ou strings utilizando a tecnologia da Microsoft.

Neste documento, procuro sempre explicar o conceito e depois mostrar o exemplo funcionando. Em caso de dúvidas, pode entrar em contato pelo site www.mauriciojunior.org

Utilizado:
Ferramenta: Visual Studio 2010 x pra cima.
Linguagem: C#
Plataforma: Web, Desktop e Mobile
Ambiente: Windows

Você pode customizar usando o 0 (zero) no momento de escrever o código. Veja o exemplo abaixo:

Listagem 1 – Código customizado com 0
double _valor;
_valor = 123;

Response.Write(_valor.ToString("00000") + "
");
Response.Write(string.Format("{0:00000}", _valor));

//Resultado: 00123
//Resultado: 00123

Note que na listagem 1, os dois jeitos de formatar mostram o mesmo resultado. O segundo tipo de formatação funciona com chaves entre as strings e dois pontos antes do formato específico. Se você mudar o exemplo acrescentando mais um valor na variável (_valor), o resultado fica 01234; isto é; diminui a quantidade de zeros a esquerda do número.

Você sabia que podemos utilizar a regra local para formatar de acordo com a língua do usuário? Vou mostrar alguns exemplos abaixo.

Listagem 2 – Código customizado com cultura
double _valor;
_valor = 10.2;

CultureInfo _ptBR = CultureInfo.CreateSpecificCulture("pt-BR");
Response.Write(_valor.ToString("00.00", _ptBR) + "
");
Response.Write(string.Format(_ptBR, "{0:00.00}", _valor));

//Resultado: 10,20
//Resultado: 10,20


_valor = 1000.2;

CultureInfo ptBR = CultureInfo.CreateSpecificCulture("pt-BR");
Response.Write(_valor.ToString("0,0.00", ptBR) + "
");
Response.Write(string.Format(ptBR, "{0:0,0.00}", _valor));

//Resultado: 1.000,20
//Resultado: 1.000,20

Antes de utilizar o que foi mostrado na listagem 2, é necessário importar uma classe de globalização, pelo contrário o método CultureInfo não funcionará. A importação é simples, no topo da classe coloque using System.Globalization; .

Depois de fazer a importação basta informar que a cultura que você quer é do Brasil, ou seja, pt-BR como está escrito na listagem 2. Caso queira coloca outra cultura, basta mudar essa string.  Note que na listagem 2 existem dois exemplos diferentes e o último utiliza vírgula e ponto no caso de valores maiores.

Para escrever o valor de 10.2 na cultura do Brasil, ou no formato do Brasil, basta colocar a formatação com a cultura. Usando o comando string.format você precisa colocar como primeiro parâmetro, no ToString() é necessário colocar por último. O resultado é o mesmo.

Podemos utilizar outra cultura para ver se o mesmo valor será mostrado de forma diferente. Veja a listagem 3.

Listagem 3 – Mudando a cultura
CultureInfo ptBR = CultureInfo.CreateSpecificCulture("zh-CN");

//Resultado: 10.20

//Resultado: 1,000.20

Note que na listagem 3 a cultura foi alterada para a cultura da China e lá o pessoal não utiliza vírgula para separar os valors dos centados. A cultura especificada mudou de vírgula para ponto.  Se você não quiser utilizar a cultura, isto é, o valor tem que ser exibido de qualquer jeito independendo da cultura, basta colocar de forma diferente. Veja a listagem 4.

Listagem 4 – Independente de cultura
Response.Write(_valor.ToString("0,0.00", CultureInfo.InvariantCulture) + "
");
Response.Write(string.Format(CultureInfo.InvariantCulture, "{0:0,0.00}", _valor));

De acordo com a listagem 4, qualquer cultura que aparecer o formato será o mesmo.
Nós podemos customizar as variáveis utilizando o símbolo # ao invés de 0 (zero). Vou mostrar alguns exemplos para que possa seguir passo a passo. A listagem 5 mostra que o valor zero não é colocado a esquerda do valor, mostrado na listagem 1.


Listagem 5 – Customizando com símbolo
double _valor;
_valor = 123;

Response.Write(_valor.ToString("#####") + "
");
Response.Write(string.Format("{0:#####}", _valor));

//Resultado: 123
//Resultado: 123

Note que na listagem 5, o resultado foi o mesmo da variável atribuída no início. Não foi colocado zero a esquerda no resultado. Um outro exemplo na listagem 6 será mostrado para que veja a diferença para formatar um número de telefone, por exemplo.

Listagem 6 – Formatando valor para telefone
_valor = 6184269999;

Response.Write(_valor.ToString("(###) ####-####") + "
");
Response.Write(string.Format("{0:(###) ####-####}", _valor));

//Resultado: (61) 8426-9999
//Resultado: (61) 8426-9999


Na listagem 6, note que o valor é o telefone e eu preciso formatar de acordo com o meu formato. Pra isso, precisei utilizar o símbolo dentro do parêntese e traço entre os números para formatar corretamente. Neste caso não foi utilizado cultura específica e você pode formatar da forma que quiser e bem entender.

Passando para outro passo, podemos utilizar dados de forma separada dentro dos chaves como o primeiro nome e segundo nome. A listagem 7 mostra um exemplo bem funcional para o dia a dia dos desenvolvedores.

Listagem 7 – Separando os dados com chaves
String _nome = "Mauricio";
String _ultimoNome = "Junior";

Response.Write(string.Format("Meu nome é {0} e o meu útlimo nome é {1}", _nome, _ultimoNome));

//Resultado: Meu nome é Mauricio e o último nome é Junior

A listagem 7 mostra a simplicidade de trabalhar com string no meio e no fim de uma frase específica. Existem programadores que colocam tudo no meio utilizando o símbolo + e aspas duplas. Só que a melhor maneira de juntar as variáveis com a string é com string.format sem o uso de concatenação com símbolos + e aspas.

Como último exemplo de formatação utilizando string.format, vou mostra que uma data pode ser transformada de forma simples. A listagem 7 mostra o formato de hora, minuto, segundo, dia, mês e ano.

Listagem 8 – Formatando data
Response.Write(string.Format("{0:dd/MM/yyyy HH:mm}", DateTime.Now));

//Resultado: 08/01/2014 11:21

Você pode utilizar a formatação com cultura do mesmo exemplo mostrado nas listagens passadas. Espero que tenha aprendido e que tenha gostado de cada exemplo. Eu fico por aqui e qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org