Форматирование номера для отображения запятых и/или знака доллара

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

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

IBOutlet UILabel *labelrev

float rev = (x + y)

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

Я получаю xxxxxxxxx как вывод, который я хочу получить xxx, xxx, xxx или $xxx, xxx, xxx

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

Ответ 1

Для этого обязательно используйте NSNumberFormatter. Основные шаги:

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

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

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. Я делаю это inline, но вы можете разбить его на два этапа:

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

Не забудьте очистить!

[formatter release];

Быстрая заметка о локализации:

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

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

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

Ответ 2

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

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

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

Ответ 3

[formatterCurrency setMaximumFractionDigits:0]

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

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

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

результат

12,345 $