NSNumberFormatter,最多显示3位数字



我想让我的一个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];
}

在我的测试中,这很有效。

相关内容

  • 没有找到相关文章

最新更新