Reputation: 95
My code is:
NSString *price = @"0.29000";
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setUsesSignificantDigits:YES];
[f setMaximumFractionDigits:2];
[f setMinimumFractionDigits:2];
NSNumber * priceNumber = [f numberFromString:price];
[f release];
NSLog(@"priceNumber:%@", priceNumber);
The result is:
priceNumber:0.2899999999999999
Whats going on here? Why not 0.29?
Upvotes: 1
Views: 496
Reputation: 765
You can use the NSDecimalNumber
class to avoid precision differences like this. With it, you create your NSDecimalNumber
object directly from the NSString
, without the need of the NSNumberFormatter
:
NSString *price = @"0.29000";
NSDecimalNumber *priceNumber = [NSDecimalNumber decimalNumberWithString:price];
NSLog(@"priceNumber:%@", priceNumber);
However, if you want to do custom formatting to this NSDecimalNumber
, you may use NSNumberFormatter
as well.
Upvotes: 2