Reputation: 85
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
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