NSNumberFormatter有效数字格式错误0.0

时间:2012-12-16 00:05:15

标签: objective-c ios nsnumberformatter

我有一个NSNumberFormatter设置为使用有效数字格式化,因此它应该只显示正确显示值所需的十进制数字。

当它用于格式化7.0时,它的工作方式完全符合预期并生成@"7",但当用于格式化0.0时,格式化程序会生成@"0.0"而不是@"0" {1}}正如预期的那样。

NSNumberFormatter *doubleValF = [[NSNumberFormatter alloc] init];
[doubleValF setNumberStyle:NSNumberFormatterDecimalStyle];
[doubleValF setRoundingMode:NSNumberFormatterRoundHalfUp];

doubleValF.maximumFractionDigits = 9;
doubleValF.minimumFractionDigits = 0;
doubleValF.minimumSignificantDigits = 0;
doubleValF.maximumSignificantDigits = 30;
[doubleValF setUsesSignificantDigits:YES];

double value1 = 0.0;
NSString *value1String = [doubleValF stringFromNumber:[NSNumber numberWithDouble:value1]];

double value2 = 7.0;
NSString *value2String = [doubleValF stringFromNumber:[NSNumber numberWithDouble:value2]];

NSLog(@"value1=%@", value1String);
NSLog(@"value2=%@", value2String);

当我运行此代码时,我得到以下输出:

2012-12-15 15:57:03.425 StackOverflowTests[41701:11303] value1=0.0
2012-12-15 15:57:03.426 StackOverflowTests[41701:11303] value2=7

3 个答案:

答案 0 :(得分:1)

按照David的LaMacchia的帖子,只需检查零值并设置sig fig模式:

if(fabs(value) < 1e-6) {
    self.numberLabelFormatter.usesSignificantDigits = NO;
}
else {
    self.numberLabelFormatter.usesSignificantDigits = YES;
}
self.numberLabel.text = [self.numberLabelFormatter stringFromNumber:[NSNumber numberWithDouble:value]];

这可能不是正确的方法,但它对我有用。

答案 1 :(得分:0)

此问题与您将usesSignificantDigits设置为YES有关。我认为0.0中的尾随数字被认为是重要的。

这里有一个相关问题的讨论:https://stackoverflow.com/a/13110633/1435955

答案 2 :(得分:0)

尝试将数字格式化程序的zeroSymbol属性设置为@“0”。

doubleValF.zeroSymbol = @"0";