Негативные изменения формата NSNumberFormatter с (ххх.ХХ) к -ХХХ.ХХ
Я хочу изменить свой NSNumberformatter с отображения отрицательных чисел с круглыми скобками вокруг них на размещение знака минус впереди (или независимо от локализованного стандарта).
Я бы предположил, что могу сделать это с помощью setNegativeFormat:
Но читая Apple, о, так тщательно docs я остаюсь почесывать голову:
SetNegativeFormat:
Задает формат, используемый приемником для отображения негатива. ценности.
- (void)setNegativeFormat:(NSString *)aFormat
Параметры аформат Строка, указывающая формат для отрицательных значений.
Доступность Доступно в iPhone OS 2.0 и более поздних версиях.
См. Также - негативный формат
Объявлено В NSNumberFormatter.h
Каковы мои возможности для aFormat?!? Да ладно вам, док-писатели, разве ссылка здесь убьет вас?
Edit: для чего это стоит вот объявление:
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
Для меня важно, чтобы сохраните локализованный символ валюты и десятичные знаки, какими бы они ни были. Итак [currencyFormatter setNegativeFormat:@"-#,##0.00"] вероятно, не будет работать, так как валюта отсутствует, и 2 десятичных знака не могут быть приняты для всех валют.
4 ответа:
Если вы посмотрите на раздел "форматирование строк" в руководстве по программированию форматирования данных для Cocoa :
Строка формата использует шаблоны формата из технического стандарта Unicode #35 (эта ссылка относится к версии tr35-6; формататоры для Mac OS X v10.4 используют версию tr35-4).Редактировать:
Если вы хотите задать строку формата, основанную на валютах, вы можете использовать символ
¤
, например пример:[formatter setFormat:@"¤#,##0.00"];
Это добавит символ валюты для текущей локализации вместо символа
¤
.Поэтому, применяя ту же концепцию к отрицательной строке формата:
[formatter setFormat:@"-¤#,##0.00"];
Это также применит символ валюты вместо
¤
для текущей локализации.
Итак, ответ, который я получил, работая:
[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];
Ключ - это whatzit? характер "¤". Не знаете, как это называется? кто-нибудь? но он представляет локализованную валюту в этих строках формата...
В этом случае он ищет формат NSString. смотрите здесь информацию о строке формата .
Если вы хотите, чтобы отрицательное значение
12,345.67
отображалось как-12,345.67
, то я считаю, что правильное значение NSString -@"-#,##0.00"
Я также отметил следующее предложение в документе, связанном выше:
Если вы не укажете формат для отрицательные значения, указанный формат для положительных значений используется, предшествует по знаку минус ( -).
Правка:
Обновление для 10.4 и после: Вот PDF, описывающий поведение в 10.4 и после
и, как следует из этого документа, вот данные о требуемом формате для 10.4 и после.
из этого документа, похоже, правильная строка может быть:@"-#,##0.##"
Все приведенные ответы предполагают, что валюта равна двум десятичным знакам, а также используют запятые в качестве разделителей тысяч. Очевидно, что существует ряд валют, которые не соответствуют этому стандарту, http://en.wikipedia.org/wiki/Decimal_mark , поэтому я использую следующую технику
NSString * formattedBalance = [currencyFormatter stringFromNumber:balance]; if([formattedBalance rangeOfString:@"("].location != NSNotFound ) { formattedBalance = [NSString stringWithFormat:@"-%@",[[formattedBalance stringByReplacingOccurrencesOfString:@")" withString:@"" ]stringByReplacingOccurrencesOfString:@"(" withString:@"" ]]; }