Получить наименьшую единицу валюты в python
поставщику кредитной карты требуется сумма транзакции в центах или наименьшая доступная единица валюты. так как я хочу, чтобы код был переносимым, мне нужно получить наименьшую единицу данной валюты, и это зависит от основного устройства. Я попытался получить его из локального модуля, но мне не повезло.
http://docs.python.org/library/locale.html
Пример
У меня есть код валюты, как описано в iso 4217
EUR за евро
тогда мне нужно 1 евро - 100 евроцентов (только информация 1/100, текст не нужен)
согласно wikipedia там валюты, которые имеют более 2 единиц, таких как старый фунт стерлингов
Ответы
Ответ 1
В качестве альтернативы cou может использовать следующий простой модуль отображения: http://pastebin.com/K7kVXi8P
Сохраните этот pastebin в модуле внутри вашего проекта (например, simple_currency_helper.py) и используйте карту (или вспомогательный метод get_currency_subunit
), чтобы получить подразделение валюты для данного ISO-кода.
>>> from simple_currency_helper import get_currency_subunit
>>> print get_currency_subunit('TND')
1000
Ответ 2
Вы можете посмотреть python-money или ccy.
Ответ 3
Насколько я знаю, нет выходного модуля, который предоставит вам эту информацию. Однако все данные, которые вам нужны, перечислены здесь: http://en.wikipedia.org/wiki/List_of_circulating_currencies
Вам, вероятно, потребуется сохранить свой собственный список (используя страницу wikipedia в качестве исходного источника). Тогда было бы разумно прямо сделать свое собственное сопоставление.
Чтобы начать, вот быстрый хак. Вставка и запуск следующего script в вашем браузере. Консоль Javascript, находясь на этой странице wikipedia, проанализирует содержимое и добавит на страницу удобную для python версию данных:
var out = "data = {\n";
$("table.wikitable").find("tr").each(function(idx) {
if (idx == 0) return; // Skip first line.
var last3 = $(this).find("td").slice(-3);
var code = $(last3[0]).text();
if (code != "None") {
var scale = $(last3[2]).text().replace(",","");
if (scale != "None") {
var minor_name = $(last3[1]).text().split("[")[0];
out += ' "' + code + '": ("' + minor_name + '", ' + scale + '),' + "\n";
}
}
});
out += "}";
$("<pre>").text(out).appendTo($("body"));
Здесь пример вывода (script выполняется с использованием Firebug):
![]()
Здесь вывод: https://gist.github.com/16d43be2652a06cf962d
Ответ 4
Локальный модуль python может предоставить вам эту информацию, но только для валюты используемой вами локали, к сожалению, она не является мультивалютой.
locale.localconv() может предоставить вам информацию для текущей локали (количество цифр - это член 'int_frac_digits'
).
Например, если вы локализованы с помощью en_US, вы можете сделать это:
locale.setlocale(locale.LC_MONETARY, "en_US") # set the en_US locale
locale.localeconv()['int_frac_digits']
>>> 2
locale.localeconv()['int_curr_symbol']
>>> 'USD '
Но если вам нужно обрабатывать каждую валюту, как сказал другой, вам придется самим создать/сохранить свой стол.
Ответ 5
Я не знаю, существует ли он для python.
мы работали с этим xml.
<item code="USD" symbol="$" sort="20" iso="840">
<name lang="en">
<singular>
<nominative>US dollar</nominative>
<genitive>US dollar</genitive>
<dative>US dollar</dative>
<full>US dollar</full>
<prepos>US dollar</prepos>
</singular>
<plural>
<nominative>US dollars</nominative>
<genitive>US dollars</genitive>
<dative>US dollars</dative>
<full>US dollars</full>
<prepos>US dollars</prepos>
</plural>
</name>
<frac lang="en">100 cents</frac>
<bank href="http://www.federalreserve.gov/">
<name lang="en">
<nominative>The U.S. Federal Reserve System</nominative>
<genitive>The U.S. Federal Reserve System</genitive>
</name>
</bank>
<synonim lang="en">
<item>buck</item>
<item>green buck</item>
</synonim>
<banknotes/>
</item>
Ответ 6
Начиная с нескольких лет, существует iso4217 package. Он предоставляет показатель десятичной точки ISO/base-10 для количества мелких единиц валюты на основную валютную единицу:
>>> import iso4217
>>> iso4217.Currency(u'EUR').exponent
2
Вы можете использовать его для прямого преобразования между маленькой и большой валютой:
def to_small_currency(large_currency_amount, iso_code):
exponent = iso4217.Currency(iso_code).exponent
if exponent == 0: # 0 signals unused/nonexistent minor currency
return large_currency_amount
return large_currency_amount * (10 ** exponent)
Обратите внимание, что существует несколько валют, которые не используют base-10 для их небольшой валюты. В настоящее время это MRU
и MGA
. ISO 4217 все еще представляет их с показателем 1, и пакет iso4217
также делает это.