NSNumberFormatter для отображения максимум 3 цифр - PullRequest
6 голосов
/ 23 марта 2012

Я хотел бы сделать так, чтобы один из моих 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?

Спасибо!

Ответы [ 3 ]

10 голосов
/ 18 декабря 2012

Я верю, что

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

будет делать именно то, что вы хотите, то есть всегда будет отображать ровно 3 цифры, будь то 2 перед десятичной дробью и 1 после или 1 перед десятичной и 2 после.

4 голосов
/ 23 марта 2012

Возможно, вам также нужно установить (хотя не уверен):

[distanceFormatter setUsesSignificantDigits: YES];

Но в вашем случае, вероятно, гораздо проще просто использовать стандартное форматирование строки:

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

(примечание: округлит последнюю цифру)

2 голосов
/ 23 марта 2012

Вот небольшая функция, которую я написал:

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

В моих тестах это работало нормально.

...