我如下创建一个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
)

最佳答案

@Barnstokkr(在评论中)解释说这是一个浮点舍入错误,如果问题是格式化时数字在末尾包含附加的000000000001,则只需使用NSNumberFormatter对象格式化字符串,即[NSString stringWithFormat:]:

NSString *formatted = [f stringFromNumber:numberObj];
NSString *formatted = [NSString stringWithFormat:@"%.2f", [numberObj floatValue]];

关于ios - 设置maximumFractionDigits不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29205260/

10-09 02:32