我有一个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
答案 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";