NSNumberFormatter最多显示3位数

时间:2012-03-23 16:03:46

标签: iphone nsnumberformatter significant-digits

我想这样做,因此我的UILabel中只有一个显示最多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完成这个?

谢谢!

3 个答案:

答案 0 :(得分:10)

我相信

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.usesSignificantDigits = YES;
formatter.maximumSignificantDigits = 3;

将完全按照您的意愿行事,即它将始终显示正好3位数字,无论是小数点前2位,小数点后1位或小数点后1位数,还是之后2位数​​。

答案 1 :(得分:4)

也许你也必须设置(不确定):

[distanceFormatter setUsesSignificantDigits: YES];

但在你的情况下,使用标准字符串格式可能要容易得多:

CGFloat yourNumber = ...;
NSString* stringValue = [NSString stringWithFormat: @"%.3f", yourNumber];

(注意:这将围绕最后一位数字)

答案 2 :(得分:2)

这是我写的一个小功能:

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

在我的测试中,这很好用。