Форматирование числа для отображения запятых и / или знака доллара - PullRequest
14 голосов
/ 23 марта 2011

Я хочу отформатировать UILabel запятыми или лучше со знаком доллара и запятыми (без десятичной дроби).

Вот код, который я использую:

IBOutlet UILabel *labelrev

float rev = (x + y)

labelrev.text = [[NSString alloc] initWithFormat:@%2.f",rev];

Я получаюххххххххх в качестве выхода я хочу получить ххх, ххх, ххх или $ ххх, ххх, ххх

Как мне это сделать?

Ответы [ 3 ]

45 голосов
/ 23 марта 2011

Вы обязательно должны использовать NSNumberFormatter для этого. Основные шаги:

  1. Выделите, инициализируйте и настройте свой числовой форматер.
  2. Используйте средство форматирования, чтобы вернуть отформатированную строку из числа . (Для этого требуется номер NSNumber, поэтому вам нужно преобразовать ваш двойной или любой другой примитив в NSNumber.)
  3. Очистить. (Вы знаете, управление памятью.)

Этот код устанавливает числовой форматер. Я сделал все, что вы хотите, кроме немного валюты. Вы можете посмотреть это в документации.

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSString *groupingSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];
[formatter setGroupingSeparator:groupingSeparator];
[formatter setGroupingSize:3];
[formatter setAlwaysShowsDecimalSeparator:NO];
[formatter setUsesGroupingSeparator:YES];

Далее вы хотите установить свой номер и вернуть отформатированную строку. В вашем случае мы оборачиваем двойное число в NSNumber. Я делаю это встроенным, но вы можете разбить его на два этапа:

NSString *formattedString = [formatter stringFromNumber:[NSNumber numberWithFloat:rev];

Не забудьте убрать!

[formatter release];

Краткое примечание о локализации:

Класс NSLocale предоставляет полезную информацию о локали пользователя. На первом этапе обратите внимание, как я использовал NSLocale для получения разделителя на локализованные группировки:

NSString *groupingSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];

(Некоторые страны используют точку / точку, в то время как другие используют запятую.) Я думаю, что есть способ получить локализованный символ валюты, но я не уверен на сто процентов, так что проверьте документацию. (Это зависит от того, что вы пытаетесь сделать.)

13 голосов
/ 23 марта 2011

Вам нужно будет использовать NSNumberFormatter, который поддерживает валюту.

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSLog(@"%@", [currencyFormatter stringFromNumber:[NSNumber numberWithInt:10395209]]);
[currencyFormatter release];

Отпечатки: $ 10 395 209,00

2 голосов
/ 14 февраля 2013
[formatterCurrency setMaximumFractionDigits:0]

- единственный способ транслировать десятичные цифры и десятичный разделитель в форматере NSNumberFormatterCurrencyStyle.

NSNumberFormatter *formatterCurrency;
formatterCurrency = [[NSNumberFormatter alloc] init];

formatterCurrency.numberStyle = NSNumberFormatterCurrencyStyle;
[formatterCurrency setMaximumFractionDigits:0];
[formatterCurrency stringFromNumber: @(12345.2324565)];

результат

12,345 $

...