Как указать десятичные знаки при форматировании объектов NSNumber? - PullRequest
10 голосов
/ 08 февраля 2009

Я использую следующий фрагмент кода Objective C для форматирования NSNumber, и он работает в большинстве случаев нормально, но не совсем так, как я хочу, когда объект NSNumber содержит целое число (без дробной части ).

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(80.0f, 90.0f, 225.0f, 40.0f)];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setFormat:@"###.##"];
int bytes = 1024 * 1024;
NSNumber *total = [NSNumber numberWithFloat:([self.totalFileSize floatValue] / bytes)];
label.text = [NSString stringWithFormat:@"0.00 MB of %@ MB", [formatter stringFromNumber:total]];

Так, например, если self.totalFileSize содержит 55.2300, он будет отображать "55.23", как и должно быть на моем UILabel. Но если эта же переменная содержит 55, на этикетке просто отобразится «55».

Что я действительно хочу, чтобы этот код всегда включал 2 десятичных знака в выводе.

Как мне этого добиться?

Ответы [ 3 ]

16 голосов
/ 08 февраля 2009

В строке формата должно быть "0" для каждого десятичного разряда, который вы хотите всегда существовать.

[formatter setFormat:@"###.00"];

для "55.23" и ".23" и ".20"

[formatter setFormat:@"##0.00"];

для "55,23" и "0,23" и "0,20"

См. Синтаксис строки числового формата (версии 10.0–10.3 для Mac OS X)

Или вы можете использовать форматер 10.4 с - setMinimumFractionDigits: и - setMaximumFractionDigits: с обоими значениями 2. 2. 1018 *

7 голосов
/ 08 февраля 2009

Я считаю, что вы ищете: "% .2f"

В худшем случае вы можете разделить значение, проверить, есть ли что-нибудь после десятичного числа. Если там нет добавления 00 от руки?

3 голосов
/ 08 февраля 2009

Возможно, вам лучше использовать localizedStringWithFormat, например ...

[UILabel alloc] initWithFrame:CGRectMake(80.0f, 90.0f, 225.0f, 40.0f)];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
int bytes = 1024 * 1024;
label.text = [NSString localizedStringWithFormat:@"0.00 MB of %.2f MB", ([self.totalFileSize floatValue] / bytes)];

И, конечно, байтов может быть const unsigned , и clearColor, как правило, снижает производительность, но это проблемы для другого потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...