Bionicle
Bionicle

Reputation: 85

NSNumber stringValue different from NSNumber value

I'm having problems with converting NSNumber to string and string to NSNumber.

Here's a sample problem:

NSString *stringValue = @"9.2";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSLog(@"stringvalue:%@",[[formatter numberFromString: stringValue] stringValue]);

Output will be:

stringvalue:9.199999999999999

I need to retrieve the original value, where, in the example should be 9.2. On the contrary, when the original string is 9.4 the output is still 9.4. Do you have any idea how to retrieve the original string value without NSNumber doing anything about it?

Upvotes: 2

Views: 2126

Answers (1)

rmaddy
rmaddy

Reputation: 318924

You are discovering that floating point numbers can't always be represented exactly. There are numerous posts about such issues.

If you need to get back to the original string, then keep the original string as your data and only convert to a number when you need to perform a calculation.

You may want to look into NSDecimalNumber. This may better fit your needs.

NSString *numStr = @"9.2";
NSDecimalNumber *decNum = [NSDecimalNumber decimalNumberWithString:numStr];
NSString *newStr = [decNum stringValue];
NSLog(@"decNum = %@, newStr = %@", decNum, newStr);

This gives 9.2 for both values.

Upvotes: 7

Related Questions