NSNumber stringValue与NSNumber值不同

时间:2013-04-19 03:35:03

标签: objective-c nsnumber nsnumberformatter

我在将NSNumber转换为字符串和字符串转换为NSNumber时遇到问题。

以下是一个示例问题:

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

输出将是:

stringvalue:9.199999999999999

我需要检索原始值,其中示例应为9.2。 相反,当原始字符串为9.4时,输出仍为9.4。 您是否知道如何在NSNumber做任何事情的情况下检索原始字符串值?

1 个答案:

答案 0 :(得分:6)

您发现浮点数不能总是精确表示。关于此类问题的帖子很多。

如果您需要返回原始字符串,请将原始字符串保留为数据,并在需要执行计算时仅转换为数字。

您可能需要查看NSDecimalNumber。这可能更适合您的需求。

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

这为两个值提供了9.2