我想让我的一个UILabels最多只能显示3位数字。因此,如果关联值为3.224789,我希望看到3.22。如果值是12.563,我希望看到12.5,如果值是298.38912,那么我希望看到298。我一直在尝试使用NSNumberFormatter来实现这一点,但当我将最大有效数字设置为3时,小数点后总是有3位数字。这是代码:
NSNumberFormatter *distanceFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[distanceFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[distanceFormatter setAlwaysShowsDecimalSeparator:NO];
[distanceFormatter setMaximumSignificantDigits:3];
我一直认为"有效数字"是指小数点前后的所有数字。无论如何,有没有一种方法可以使用NSNumberFormatter来实现这一点?
谢谢!
我相信
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.usesSignificantDigits = YES;
formatter.maximumSignificantDigits = 3;
将完全按照您的意愿执行,即它将始终显示3位数字,无论是小数前2位和小数后1位,还是小数前1位和小数后面2位。
也许您还必须设置(但不确定):
[distanceFormatter setUsesSignificantDigits: YES];
但在您的情况下,只使用标准字符串格式可能会容易得多:
CGFloat yourNumber = ...;
NSString* stringValue = [NSString stringWithFormat: @"%.3f", yourNumber];
(注意:这将取整最后一位)
下面是我写的一个小函数:
int nDigits(double n)
{
n = fabs(n);
int nDigits = 0;
while (n > 1) {
n /= 10;
nDigits++;
}
return nDigits;
}
NSString *formatNumber(NSNumber *number, int sigFigures)
{
double num = [number doubleValue];
int numDigits = nDigits(num);
NSString *format = [NSString stringWithFormat:@"%%%i.%ilf", sigFigures -= numDigits, sigFigures];
return [NSString stringWithFormat:format, num];
}
在我的测试中,这很有效。