2010-05-30 10 views
11

Sto utilizzando un NSDecimalNumber per archiviare denaro in Core Data. Ho usato ingenuamente stringWithFormat: inizialmente per formattare il valore, realizzando in seguito che non supporta NSDecimalNumber e invece stava formattando il puntatore :(. Quindi dopo aver letto i documenti ho imparato ad usare NSNumberFormatter per ottenere il formato che volevo. ma questo solo mi colpisce come il "modo più duro". c'è un modo più facile di questo :?NSNumberFormatter è l'unico modo per formattare un NSDecimalNumber?

NSNumberFormatter * formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 
priceField.text = [formatter stringFromNumber: ent.price]; 
[formatter release]; 

risposta

13

non c'è niente di sbagliato in questo approccio, ed è il modello convenzionale di convertire le classi numero opachi alle stringhe.

Se ho un UIView che usa spesso un formattatore, di solito ne ho uno come membro di istanza, quindi evito di dover ripetutamente alloc/init/release il formattatore.

0

NSNumberFormatter può essere costoso, perché non basta chiamare [ENT descriptionWithLocale:]

+0

Da quello che posso dire nella documentazione, che non forniscono un modo per formattare valuta. –

-1

Basta convertirlo in un doppio e usare "F"

[NSString stringWithFormat: @ "% 1.2F", [ENT doubleValue]];

+0

È sicuramente più veloce, ma credo che ci siano casi in cui questo mostrerà il valore sbagliato. Se si potesse semplicemente usare il doppio ovunque, non sarebbe necessario NSDecimalNumber in primo luogo. –

18

su iOS 4.0 e versioni successive è possibile utilizzare questo metodo:

NSString* currencyString = [NSNumberFormatter 
           localizedStringFromNumber:number 
           numberStyle:NSNumberFormatterCurrencyStyle]; 
Problemi correlati