Cambia il formato negativo di NSNumberFormatter da (xxx.xx) a -xxx.xx
-
06-07-2019 - |
Domanda
Voglio cambiare il mio NSNumberformatter dalla visualizzazione di numeri negativi con parentesi attorno a mettere il segno meno in primo piano (o qualunque sia lo standard localizzato).
Suppongo di poterlo fare con setNegativeFormat:
ma leggendo i documenti di Apple, così approfonditi, mi sono lasciato grattarmi la testa:
setNegativeFormat:
Imposta il formato utilizzato dal ricevitore per visualizzare valori negativi.
- (void)setNegativeFormat:(NSString *)aFormat
Parametri AFormattare Una stringa che specifica il formato per i valori negativi.
Disponibilità Disponibile in iPhone OS 2.0 e versioni successive.
Vedi anche - negativeFormat
Dichiarato in NSNumberFormatter.h
quali sono le mie opzioni per aFormat?!? Dai Doc Writers, un link qui ti ucciderebbe?
modifica: per quello che vale ecco la dichiarazione:
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
È importante per me conservare il simbolo di valuta localizzata & amp; i decimali qualunque essi siano. Pertanto [currencyFormatter setNegativeFormat: @ " - #, ## 0.00 "] probabilmente non funzionerà poiché manca la valuta e non è possibile assumere 2 decimali per tutte le valute.
Soluzione
Se dai un'occhiata a " Stringhe formato " sezione nella Guida alla programmazione della formattazione dei dati per Cocoa :
La stringa di formato utilizza i modelli di formato dello Standard tecnico Unicode # 35 (questo riferimento è alla versione tr35-6; i formattatori per Mac OS X v10.4 usano la versione tr35-4 ).
Modifica
Se si desidera impostare una stringa di formato in base alle valute, è possibile utilizzare il carattere ¤
, ad esempio:
[formatter setFormat:@"¤#,##0.00"];
Questo aggiungerà il simbolo di valuta per la localizzazione corrente al posto del carattere ¤
.
Pertanto, applicando lo stesso concetto alla stringa di formato negativo:
[formatter setFormat:@"-¤#,##0.00"];
Questo applicherà anche il simbolo di valuta al posto del ¤
per la localizzazione corrente.
Altri suggerimenti
OK, quindi la risposta che ho ottenuto è:
[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];
la chiave è questo whatzit? carattere " ¤ " ;. Non hai idea di come si chiama? chiunque? ma rappresenta la valuta localizzata in queste stringhe di formato ...
In questo caso sta cercando un formato NSString. Cerca qui i dettagli delle stringhe di formato .
Se vuoi che il negativo di 12.345.67
venga visualizzato come -12.345.67
, allora credo che il valore NSString corretto sia @ " - #, ## 0.00 "
Ho anche notato la seguente frase nel documento linkato sopra:
Se non specifichi un formato per valori negativi, il formato specificato per valori positivi viene utilizzato, preceduto con un segno meno (-).
EDIT:
Aggiornamento per 10.4 e versioni successive: E, come collegato da quel documento, ecco i i dati sui requisiti richiesti formato per 10.4 e successive .
Da questo documento, sembra che la stringa corretta possa essere: @"-#,##0.##"
Tutte le risposte fornite presuppongono che la valuta sia al secondo decimale e usi anche le virgole come migliaia di separatori. Ovviamente ci sono diverse valute che non sono conformi a questo standard, http://it.wikipedia.org / wiki / Decimal_mark , quindi utilizzo la seguente tecnica
NSString * formattedBalance = [currencyFormatter stringFromNumber:balance];
if([formattedBalance rangeOfString:@"("].location != NSNotFound ) {
formattedBalance = [NSString stringWithFormat:@"-%@",[[formattedBalance stringByReplacingOccurrencesOfString:@")" withString:@"" ]stringByReplacingOccurrencesOfString:@"(" withString:@"" ]];
}