{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)
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 -(void)addGasto:(id)sender{
2 [gastos addGastoFromString: valorDoGasto.text];
3 valorDoGasto.text = @"";
4
5 numeroDeGastos.text = [NSString stringWithFormat:@"%i", [gastos totalDeGastos]];
6
7 id somatorioGastos = [gastos somaDosGastos];
8
9 NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
10 [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
11 NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"pt_BR"];
12 [formatter setLocale: locale];
13
14 totalDosGastos.text = [formatter stringFromNumber:somatorioGastos];
15 }
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:
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