2010-05-30 5 views
11

J'utilise un NSDecimalNumber pour stocker de l'argent dans Core Data. J'ai naïvement utilisé stringWithFormat: d'abord formater la valeur, plus tard réaliser qu'il ne supportait pas NSDecimalNumber et formater plutôt le pointeur :(Donc, après avoir lu les docs, j'ai appris à utiliser NSNumberFormatter pour obtenir le format que je voulais. mais ce juste me frappe comme la « dure ». y at-il beaucoup plus facile que ce :?NSNumberFormatter est-il le seul moyen de formater un NSDecimalNumber?

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

Répondre

13

il n'y a rien de mal à cette approche, et il est le modèle classique pour convertir les classes de nombres opaques à des chaînes.

Si j'ai un UIView qui utilise souvent un formateur, j'en aurai généralement un en tant que membre de l'instance afin d'éviter d'avoir à le faire plusieurs fois /init/release le formateur.

0

NSNumberFormatter peut être coûteux, pourquoi ne pas simplement appeler [ent descriptionWithLocale:]

+0

D'après ce que je peux dire dans les documents, qui ne fournit pas un moyen de formater la monnaie. –

-1

Il suffit de le convertir en un double et utiliser "F"

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

+0

C'est certainement plus rapide, mais je crois qu'il y a des cas où cela afficherait une valeur erronée. Si vous pouviez simplement utiliser des doubles partout, vous n'auriez pas besoin de NSDecimalNumber en premier lieu. –

18

sur iOS 4.0 et vous pouvez ensuite utiliser cette méthode:

NSString* currencyString = [NSNumberFormatter 
           localizedStringFromNumber:number 
           numberStyle:NSNumberFormatterCurrencyStyle]; 
Questions connexes