2010-02-10 11 views

risposta

76

Non eseguire la formattazione del proprio numero. Quasi certamente non riuscirai a risolvere tutti i casi limite o a gestire correttamente tutte le possibili impostazioni locali. Utilizzare NSNumberFormatter per formattare i dati numerici in una rappresentazione stringa localizzata.

si può usare il metodo istanza NSNumberFormatter-setGroupingSeparator: per impostare il separatore di raggruppamento per @"," (o meglio ancora [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator]; grazie @ntesler) e -setGroupingSize: mettere un separatore di raggruppamento ogni 3 cifre.

+0

Cool, sono impostato su I -setGroupingSize:? O ho bisogno di -setFormat:? – RexOnRoids

+26

Ho anche dovuto fare [formatter setUsesGroupingSeparator: YES]; – adam

+9

Meglio non localizzarlo con '[formatter setGroupingSeparator: [[NSLocale currentLocale] objectForKey: NSLocaleGroupingSeparator]];' – ntesler

143

Utilizzare NSNumberFormatter.

particolare:

NSNumberFormatter *formatter = [NSNumberFormatter new]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important! 

NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]]; 

[formatter release]; 

Per default NSNumberFormatter utilizza localizzazione corrente in modo che i separatori di raggruppamento sono impostate sui valori corretti per impostazione predefinita. La cosa fondamentale è ricordarsi di impostare uno stile numerico.

+3

+1 per usare gli stili esistenti e un esempio funzionante. – zekel

+3

Suggerimento: nuovo è old school .... usa alloc init – MCKapur

+0

sì, ho avuto problemi analoghi che non analizzava "200.000", anche se avevo impostato le impostazioni locali in inglese UK, finché non avevo impostato lo stile su NSNumberFormatterDecimalStyle. Pensa che comprenderebbe solo la stringa "200000" –

29

C'è un static method on NSNumberFormatter che fa proprio quello che vi serve:

int aNum = 2000000; 
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum) 
                numberStyle:NSNumberFormatterDecimalStyle]; 

In questo modo è un po 'più succinta rispetto alla creazione di un nuovo NSNumberFormatter se non è necessario eseguire alcuna configurazione aggiuntiva del formattatore.

15

Pensate un po 'che otterrò questo post cercando un campione. Quindi, se si sta lavorando con il numero fare attenzione su prossimi params:

setNumberStyle:NSNumberFormatterCurrencyStyle // if you are working with currency 

Si potrebbe anche

setNumberStyle:NSNumberFormatterDecimalStyle 

Tutto il codice è per ARC.

Se si lavora con numeri interi e la necessità di risultato come ad esempio 200.000

int value = 200000; 
NSNumberFormatter * formatter = [NSNumberFormatter new]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
NSString * newString = [formatter stringFromNumber:[NSNumber numberWithInteger:value]]; 

se si sta lavorando con galleggiante e hanno bisogno al risultato ottenere ottenere come 200,000.00

float value = 200000; 
NSNumberFormatter * formatter = [NSNumberFormatter new]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits 
NSString * newString = [formatter stringFromNumber:[NSNumber numberWithFloat:value]]; 

EDIT

Per avere la possibilità di utilizzare separatori digitali diversi utilizzare NSLocale. Aggiungi al codice in cui si specifica NSLocale on Locale Identifier:

[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]]; 

o uso corrente locale:

[formatter setLocale:[NSLocale currentLocale]]; 
+0

Se voglio punto (.) Invece di virgola (,) allora? – Birju

+1

modo semplice per usare 'NSLocale' basta aggiungere' [formatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @ "de_DE"]]; 'per usare separatori diversi, dipende dallo stile digitale locale – Nazir

+0

Come visualizzare 5.234.00 ... i è necessario visualizzare 2 numeri decimali – Singapore

17

Ancora più facile:

NSNumber *someNumber = @(1234567890); 
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber]; 
NSLog(@"Number with commas: %@", modelNumberString); 

collega mi ha insegnato questo oggi.#amazing

+1

Basta ringraziare per lui ... –

+0

@Yujean non funziona per me – Dalvik

+0

non funziona neanche per me. nessuna virgola mostra –

1

Swift versione

let formatter = NSNumberFormatter() 
formatter.numberStyle = .DecimalStyle 
formatter.maximumFractionDigits = decimalPlaces 
let result = formatter.stringFromNumber(NSNumber(double: 8.0)) 

Con http://ios.eezytutorials.com

0

Una soluzione semplice potrebbe essere questo. La mia risposta è quasi la stessa della risposta di @ Nazir, ma con un piccolo trucco.

double current_balance = 2000000.00; 

NSNumberFormatter * formatter = [NSNumberFormatter new]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
//[formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; //if you want for currency with $ sign 
[formatter setMinimumFractionDigits:2]; // Set this if you need 2 digits 
[formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits 
NSString * currency_format = [NSString stringWithFormat:@"%@", [formatter stringFromNumber:[NSNumber numberWithDouble:current_balance]]]; 
Problemi correlati