2

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

当它用于格式化7.0时,它完全按预期工作并产生@"7",但是当它用于0.0格式化格式化程序时,它会产生@"0.0"而不是@"0"预期的那样。

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
4

3 回答 3

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]];

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

于 2013-03-07T20:58:36.707 回答
0

该问题与您设置usesSignificantDigitsYES. 我相信后面的数字 in0.0被认为是重要的。

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

于 2012-12-16T01:16:10.967 回答
0

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

doubleValF.zeroSymbol = @"0"; 
于 2015-04-13T12:55:40.813 回答