Определение количества десятичных знаков для валюты

На айфоне:

Using the US locale, a currency looks like this: $1,234.56
Using the UK locale, a currency looks like this: £1,234.56
Using the German (Germany) locale, a currency looks like this: 1.234,56 €

and finally, a Japanese currency: ¥1,234

В японской валюте нет десятичных знаков, и это значительно влияет на мою пользовательскую клавиатуру. Я пытаюсь найти метод в структуре Cocoa-touch, который скажет мне, сколько знаков после запятой имеет конкретная валюта - мое жестко закодированное значение 2 не оправдывает меня :(

Кто-нибудь может помочь?


person rein    schedule 12.07.2009    source источник


Ответы (4)


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

CFStringRef localeIdent = CFSTR("JPY");

int numDecimals;
double rounding;
BOOL result = CFNumberFormatterGetDecimalInfoForCurrencyCode(localeIdent, &numDecimals, &rounding);

Надеюсь, это поможет.

person RichardCase    schedule 15.07.2009

Я давно не программировал в Cocoa, но в документации для NSNumberFormatter есть функция под названием 'currencyDecimalSeparator', которая может, по крайней мере, сказать вам, есть ли она вообще у валюты, что может быть началом?

person Steve Mc    schedule 14.07.2009

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

Обратите также внимание: для некоторых валют требуется три или четыре знака после запятой. См. примеры на http://www.londonfx.co.uk/ccylist.html. .

person Nat    schedule 12.07.2009
comment
NSNumberFormatter отлично подходит для этого. У меня нет проблем с форматированием, так как все это делает за меня форматер. Я просто не могу понять, как определить, сколько знаков после запятой мне нужно предусмотреть. Спасибо за ссылку - интересно. - person rein; 12.07.2009
comment
Кстати, в идеале я бы хотел связать количество знаков после запятой с тем, что закодировано в форматере, иначе что-то может пойти не так. - person rein; 12.07.2009

У меня была похожая проблема, но приведенные выше ответы на самом деле не решили мою проблему.

В итоге я использовал метод maxFractionDigits в NSNumberFormatter, который дал мне 0 для японской локали. Убедитесь, что вы используете NSNumberFormatterCurrencyStyle для средства форматирования, иначе вы увидите десятичные разряды в других средствах форматирования.

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

    NSLog(@"Number of decimal places %i", [currencyFormatter maximumFractionDigits]);
person Joe Regan    schedule 01.06.2011