Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 设置maximumFractionDigits不起作用_Ios_Objective C - Fatal编程技术网

Ios 设置maximumFractionDigits不起作用

Ios 设置maximumFractionDigits不起作用,ios,objective-c,Ios,Objective C,我创建了一个NSNumberFormatter,如下所示,将最大分数位数设置为2,当我试图格式化@“93.650000”时,它的输出类似于93.6500000000001。我很困惑,怎么了 编辑: 我的问题是,我不知道如何将93.6500000000001输出为字符串,只将93.65输出为字符串 NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalSt

我创建了一个NSNumberFormatter,如下所示,将最大分数位数设置为2,当我试图格式化@“93.650000”时,它的输出类似于93.6500000000001。我很困惑,怎么了

编辑: 我的问题是,我不知道如何将93.6500000000001输出为字符串,只将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>
)
(
95.370000,
93.650000,
76.330000,
73.040000,
70.050000,
69,
66.510000,
57.540000,
53.760000,
)
格式化的NSNumber数组: (lldb)波瓦雷

<__NSArrayM 0x174c524b0>(
95.37,
93.65000000000001,
76.33,
73.04000000000001,
70.05,
69,
66.51000000000001,
57.54,
53.76,
0
)
(
95.37,
93.65000000000001,
76.33,
73.04000000000001,
70.05,
69,
66.51000000000001,
57.54,
53.76,
0
)

为了更好地处理十进制数,您可以尝试使用NSDecimalNumber而不是NSNumber。 它有一个class method+decimalNumberWithString:

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

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

这是内部NSNumber类型的一个限制,它将是64位浮点的32位。它试图尽可能最好地存储值,但没有无限位,必须将其舍入到最接近的位代表。这就是为什么不建议对循环变量使用双精度或浮点数。我如何解决它?@Wingzero你还没有提出实际问题。有人告诉你为什么要在最后得到
000000000001
,但这有什么问题?你可以忽略它。@特洛伊木马,因为我已经编辑了我的问题。我不在乎它的存储方式,但当我试图将93.6500000000001打印为字符串时,我只想要93.65。但它给了我@“93.6500000000001”使用
[NSString stringWithFormat:@“%.2f”,[numberObject floatValue]]
对其进行格式化。最好还是使用您创建的
NSNumberFormatter
对象。谢谢您……但相关注释解决了问题。