2012-03-23 4 views
6

Я хотел бы сделать так, чтобы один из моих UILabels показывал максимум 3 цифры. Итак, если связанное значение равно 3.224789, я хотел бы видеть 3.22. Если значение 12.563, я бы хотел увидеть 12.5, и если значение равно 298.38912, то я бы хотел увидеть 298. Я пытался использовать NSNumberFormatter для этого, но когда я установил максимальные значащие цифры в 3 он всегда имеет 3 цифры после десятичного знака. Вот код:NSNumberFormatter, чтобы показать максимум 3 цифры

NSNumberFormatter *distanceFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[distanceFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[distanceFormatter setAlwaysShowsDecimalSeparator:NO]; 
[distanceFormatter setMaximumSignificantDigits:3]; 

Я всегда думал, что «значащих цифр» означает все цифры, до и после десятичной точки. Во всяком случае, есть ли способ сделать это, используя NSNumberFormatter?

Спасибо!

ответ

10

Я считаю, что

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

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

+1

Да, это отлично работает. Установка флага 'usesSignificantDigits' в значение YES является ключом к этому решению для OP. Я просто использовал это, и действительно, он работает через десятичную точку, например, он конвертирует 19.17 $ в 19.20. –

+0

, пожалуйста, проверьте мой вопрос http://stackoverflow.com/questions/35112206/how-to-show-only-first-two-numbers-in-nsnumberformatter. Это не работает для меня в Swift – Alexander

2

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

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

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

+0

Спасибо за понимание вопроса. Существует разница между «значащими цифрами» и «числом цифр справа от десятичной точки». –

4

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

[distanceFormatter setUsesSignificantDigits: YES];

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

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

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

Смежные вопросы