我创建一个NSNumberFormatter,如下所示,将最大分数设置为2,当我尝试格式化@“93.650000”时,输出如93.65000000000001。我很困惑,它有什么问题?
编辑: 我的问题是,我不输出93.65000000000001作为字符串,只有93.65作为字符串。
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
f.minimumFractionDigits = 0;
f.maximumFractionDigits = 2;
NSString *valueString;
for (NSString *valueStr in valueStrArray) {
valueString = valueStr;
if ((NSNull *)valueString == [NSNull null])
valueString = @"0";
NSNumber *value = [f numberFromString:valueString];
[vArray addObject:value];
}
原始值字符串数组:
<__NSCFArray 0x1742e8700>(
95.370000,
93.650000,
76.330000,
73.040000,
70.050000,
69,
66.510000,
57.540000,
53.760000,
<null>
)
格式化的NSNumber数组: (lldb)po vArray
<__NSArrayM 0x174c524b0>(
95.37,
93.65000000000001,
76.33,
73.04000000000001,
70.05,
69,
66.51000000000001,
57.54,
53.76,
0
)
答案 0 :(得分:1)
您可以尝试使用NSDecimalNumber而不是NSNumber来更好地处理十进制数。 它有一个类方法+ decimalNumberWithString:
答案 1 :(得分:0)
@Barnstokkr(在评论中)解释说这是一个浮点舍入错误,如果问题是数字在格式化时包含额外的000000000001
,那么只需使用{{1对象格式化字符串,或NSNumberFormatter
:
[NSString stringWithFormat:]