Bionicle Bionicle - 3 months ago 17
Objective-C Question

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?

Answer

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.

Comments