Pergunta

Eu quero mudar minha NSNumberFormatter de exibir números negativos com parênteses em torno deles para colocar o sinal de menos na frente (ou qualquer que seja o padrão localizado é).

Eu diria que eu poderia fazer isso com setNegativeFormat:

mas a leitura docs, oh, tão completas da Apple Estou coçando a cabeça:


setNegativeFormat:

Define o formato dos usos receptor para valores negativos de exibição.

- (void)setNegativeFormat:(NSString *)aFormat

Parâmetros AFormatar Uma string que especifica o formato para valores negativos.

Disponibilidade Disponível em iPhone OS 2.0 e posterior.

Consulte também - negativeFormat

declarado em NSNumberFormatter.h


Quais são as minhas opções para AFormatar?!? C'mon Doc Escritores, seria um link aqui matá-lo?

edit: para que é que vale aqui é a declaração:

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

É importante para mim manter o símbolo de moeda local e casas decimais sejam elas quais forem. Então [CurrencyFormatter setNegativeFormat: @ "- #, ## 0.00"] provavelmente não vai funcionar como moeda está faltando e 2 casas decimais não pode ser assumida para todas as moedas.

Foi útil?

Solução

Se você der uma olhada na seção "Format Strings" na formatação de dados Guia de Programação Para Cacau :

A cadeia de formato utiliza os padrões de formato do padrão Técnico Unicode # 35 (esta referência é a versão tr35-6; formatadores para Mac OS X versão uso v10.4 tr35-4 ).

Editar:

Se você quiser definir uma seqüência de formato baseado em moedas, você pode usar o caractere ¤, por exemplo:

[formatter setFormat:@"¤#,##0.00"];

Isto irá adicionar o símbolo de moeda para a localização atual no lugar do personagem ¤.

Portanto, aplicando-se o mesmo conceito para a cadeia de formato negativo:

[formatter setFormat:@"-¤#,##0.00"];

Isso também irá aplicar o símbolo de moeda no lugar do ¤ para a localização atual.

Outras dicas

OK, então a resposta que eu fui trabalhar é:

[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];

a chave é esta whatzit? caráter "¤". Não faço ideia o que é chamado? qualquer um? mas representa a moeda local nestas cadeias de formato ...

Neste caso, ele está à procura de um NSString formato. Olhe aqui para detalhes cordas formato .

Se você quer o negativo de 12,345.67 para exibir como -12,345.67, então eu acredito que o valor NSString correta é @"-#,##0.00"

Eu também observou a seguinte frase no documento ligada acima:

Se você não especificar um formato para valores negativos, o formato especificado para valores positivos é usado, precedidos por um sinal de menos (-).

EDIT:
Atualização para 10,4 e depois: Aqui está uma descrição do comportamento PDF em 10,4 e depois
E, como ligada a partir desse documento, aqui é o dados do necessário formato para 10.4 e depois .
A partir deste documento, parece que a seqüência correta pode ser: @"-#,##0.##"

Todas as respostas dadas assumir que a moeda está com duas casas decimais e também usa vírgulas como separadores de milhar. Obviamente, há uma série de moedas que não estão em conformidade com esta norma, http://en.wikipedia.org / wiki / Decimal_mark , então eu uso a seguinte técnica

    NSString * formattedBalance = [currencyFormatter stringFromNumber:balance];
    if([formattedBalance rangeOfString:@"("].location != NSNotFound ) {
        formattedBalance = [NSString stringWithFormat:@"-%@",[[formattedBalance stringByReplacingOccurrencesOfString:@")" withString:@"" ]stringByReplacingOccurrencesOfString:@"(" withString:@"" ]];
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top