Paul Alexander
Paul Alexander

Reputation: 32367

Is NSNumberFormatter the only way to format an NSDecimalNumber?

I'm using an NSDecimalNumber to store money in Core Data. I naively used stringWithFormat: at first to format the value, later realizing that it didn't support NSDecimalNumber and was instead formatting the pointer :(. So after some reading through the docs I learned to use the NSNumberFormatter to get the format I wanted. But this just strikes me as the "hard way". Is there any easier way than this:?

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

Upvotes: 11

Views: 8165

Answers (4)

Matt Stoker
Matt Stoker

Reputation: 350

on iOS 4.0 and later you can use this method:

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

Upvotes: 18

Steven Bristol
Steven Bristol

Reputation: 169

Just convert it to a double and use "F"

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

Upvotes: -1

jarjar
jarjar

Reputation: 1701

NSNumberFormatter can be expensive, why not just call [ent descriptionWithLocale:]

Upvotes: 0

Shaggy Frog
Shaggy Frog

Reputation: 27601

There's nothing wrong with that approach, and it's the conventional pattern to convert opaque number classes to strings.

If I have a UIView that uses a formatter often, I'll usually have one as an instance member so I avoid having to repeatedly alloc/init/release the formatter.

Upvotes: 13

Related Questions