Formato do negativo da mudança NSNumberFormatter a partir de (xxx.xx) para -xxx.xx
-
06-07-2019 - |
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.
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:@"" ]];
}