我正在尝试以科学的方式显示一些小数。我正在使用 NSDecimalNumber 和 NSNumberFormatter 对象。但是,在设置最小和最大位数时,原始数字中的一些信息似乎丢失了。例如,考虑以下代码示例:
NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInt:3123400] decimalValue]];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterScientificStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
NSString *result = [formatter stringFromNumber:dn];
// Expected: result is 3.12E6
// Actual: result is 3.10E6
[formatter release];
在这种情况下,我预计 NSString 变量结果等于 3.12E6。setMinimumFractionDigits 和 setMaximumFractionDigits 调用已将最终结果锁定在小数点后 2 位。不幸的是,第二个数字实际上是 0 而不是预期值 2。
将 setMinimumFractionDigits 和 setMaxiumFractionDigits 调用增加到 3,产生 3.120E6 的结果。最后一位,在本例中为第三个小数位,再次保持为 0,而不是预期值 3。
为什么在这些情况下最后一个数字是 0?是否有一些我缺少的 NSNumberFormatter 设置或配置?我正在使用 Xcode 版本 3.2.2。