{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
22/05/2012
Já que começamos a criar uma app que lida com valores monetários precisamos garantir que a nossa aplicação exiba corretamente os dados. (confira todos os posts sobre iOS)
##Formatando valores em Reais R$ Vamos formatar nosso valor de acordo com uma cultura específica, no nosso caso pt-BR, para deixarmos nosso valores monetário em Reais. Modificando um pouco nosso método addGasto (do projeto anterior) teremos isso:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-(void)addGasto:(id)sender{
[gastos addGastoFromString: valorDoGasto.text];
valorDoGasto.text = @"";
numeroDeGastos.text = [NSString stringWithFormat:@"%i", [gastos totalDeGastos]];
id somatorioGastos = [gastos somaDosGastos];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"pt_BR"];
[formatter setLocale: locale];
totalDosGastos.text = [formatter stringFromNumber:somatorioGastos];
}
A novidade aí está na linha 9 onde criamos um objeto NSNumberFormatter. Esta classe fornece uma séria de configurações para formatarmos números: separadores decimais, separadores de milhar, porcentagem, códigos monetários, formatos, etc.
Na linha 10 configuramos este formatador como um formatador monetário. Nas linhas 11 e 12 é que está nosso segredo: criamos um objeto NSLocale utilizando um locale identifier, no nosso caso pt-BR. Depois de criado nosso objeto nós configuramos o locale no nosso formatter.
Feito isso na linha 14 apenas obtemos o número formatado passando a mensagem stringFromNumber para nosso formatador e colocamos o mesmo em nosso label, como vemos abaixo:

##Resumo A formatação de valores é algo que sempre consome um pouco, mas não é nenhum bicho de set cabeças nesse caso. Se encapsularmos isso em um método que recebe um valor e retorna uma string formatada fica tudo bastante simples (no código completo do github isso está em um método separado).
Como internacionalização é um assunto mais abrangente preferi deixar para o futuro :P
Como sempre o código do projeto está no github: https://github.com/vquaiato/ios-blog-samples/tree/master/somatorioDeContasLocale