2

我有这个示例代码:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSString *numberString = @"9.2";
NSNumber *number = [formatter numberFromString:numberString];
NSLog(@"String: %@, Number: %@", numberString, number);

打印的结果是:

String: 9.2, Number: 9.199999999999999

我不明白为什么会发生这种情况。我错过了一个设置吗?

4

1 回答 1

2

根据this reference, anNSNumber可以存储任何普通的C 数字类型。由于这是通过解析非整数获得的,因此可供选择的两种类型是floatdouble,并且通过显示的值,选择的表示是double

由于像 9.2 这样的小数不能完全表示为doubles,因此您会得到最接近的可表示数字。显示为默认精度,大约为小数点后 16 位。

于 2012-04-20T22:27:47.120 回答