Измените отрицательный формат NSNumberFormatter с (xxx.xx) на -xxx.xx - PullRequest
8 голосов
/ 18 июня 2009

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

Я бы предположил, что мог бы сделать это с помощью setNegativeFormat:

но, читая Apple, о, настолько тщательные документы, я остаюсь, почесывая голову:


setNegativeFormat:

Устанавливает формат, используемый приемником для отображения отрицательных значений.

- (void)setNegativeFormat:(NSString *)aFormat

Параметры aFormat Строка, определяющая формат для отрицательных значений.

Наличие Доступно в iPhone OS 2.0 и более поздних версиях.

См. Также - негативный формат

Объявлено в NSNumberFormatter.h


Какие у меня варианты для формата?!? Да ладно вам, писатели док, убьет ли вас ссылка?

edit: для чего стоит вот объявление:

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

Для меня важно сохранить локализованный символ валюты и десятичные знаки, какими бы они ни были. Поэтому [currencyFormatter setNegativeFormat: @ "- #, ## 0.00"], вероятно, не будет работать, так как отсутствует валюта, и нельзя использовать 2 десятичных знака для всех валют.

Ответы [ 4 ]

18 голосов
/ 18 июня 2009

Если вы посмотрите на раздел «Форматирование строк» ​​в Руководство по программированию форматирования данных для какао :

В строке формата используются шаблоны формата из Технического стандарта Unicode # 35 (это ссылка на версию tr35-6; средства форматирования для Mac OS X 10.4 используют версию tr35-4 ).

Изменить:

Если вы хотите установить строку формата на основе валют, вы можете использовать символ ¤, например:

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

Это добавит символ валюты для текущей локализации вместо символа ¤.

Следовательно, применяя ту же концепцию к отрицательной строке формата:

[formatter setFormat:@"-¤#,##0.00"];

Также будет применен символ валюты вместо ¤ для текущей локализации.

1 голос
/ 10 июля 2014

Во всех приведенных ответах предполагается, что валюта указана с двумя десятичными знаками, а также используются запятые в качестве разделителей тысяч. Очевидно, есть ряд валют, которые не соответствуют этому стандарту, 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:@"" ]];
    }
1 голос
/ 18 июня 2009

ОК, поэтому я получил ответ:

[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];

ключ это что везит? символ "¤". Понятия не имеете, как это называется? кто-нибудь? но он представляет локализованную валюту в этих строках формата ...

1 голос
/ 18 июня 2009

В этом случае он ищет формат NSString. Смотрите здесь информацию о форматной строке .

Если вы хотите, чтобы отрицательное значение 12,345.67 отображалось как -12,345.67, то я считаю, что правильное значение NSString равно @"-#,##0.00"

Я также отметил следующее предложение в документе, связанном выше:

Если вы не указали формат для отрицательные значения, указанный формат для положительных значений используется предшествующий со знаком минус (-).

EDIT:
Обновление для 10.4 и после: Вот PDF, описывающий поведение в 10.4 и после
И, как видно из этого документа, здесь приведены данные в требуемом формате для 10.4 и после .
Из этого документа представляется, что правильная строка может быть: @"-#,##0.##"

...