Негативные изменения формата 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 8

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:@"" ]];
    }