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.

È stato utile?

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:@"" ]];
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top