Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

Formatação de valores em Reais(R$) no iOS


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 -(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:

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

Voltar

Fork me on GitHub