我有这个示例代码:
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
我不明白为什么会这样。我错过了一个设置吗?
答案 0 :(得分:2)
根据this reference,NSNumber
可以存储任何普通的C数字类型。由于这是通过解析非整数获得的,因此可以选择的两种类型是float
和double
,并且根据显示的值,所选的表示形式为double
。
由于像9.2这样的小数部分并不能完全表示为double
s,因此您可以获得最接近的可表示数字。它显示为默认精度,大约是16位小数。