Dave
Dave

Reputation: 95

NSNumberFormatter not working correctly

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

Answers (1)

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

Related Questions