2012-09-04 8 views
10

クレジットカードプロバイダは、セントまたはユーロの最小単位で取引金額を必要とします。私はコードを移植可能にしたいので、私は与えられた通貨の最小単位を取得しなければなりません、そして、それは主要な単位に要因です。私はロケールモジュールから取得しようとしましたが、私は運がありませんでした。pythonで通貨の最小単位を取得

http://docs.python.org/library/locale.html

ユーロ

ためiso 4217

EURに記載されているように、私は、私は1ユーロ、100ユーロセント(情報のみ1 /である必要通貨コードを有します100、テキストは不要)

accordi wikipedia旧通貨のように2単位以上の通貨がある通貨

+0

私たちにあなたが持っているものと期待しているものを挙げてください。 –

+2

upvotesで判断すると、あなたが求めていることを他人に明らかにしなければなりません。しかし、私はこの質問が例を使用できると思う。 –

+2

自分のテーブルをコンパイルして最新の状態に保つ必要があるようです。 – deStrangis

答えて

3

またCOUは、次のような単純なマッピングモジュールを使用することができます。py)を使用し、マップ(またはヘルパーメソッドget_currency_subunit)を使用して、指定されたISOコードの通貨サブユニットを取得します。

>>> from simple_currency_helper import get_currency_subunit 
>>> print get_currency_subunit('TND') 
1000 
+0

これは動作することができますが、私のコードでこのリストを維持するアイデアが好きではない – frog32

+1

次に:D本当のpythonプロジェクトはこのペーストビンに基づいて(私はそれに資格を主張していません)、コミットすることができます** b)* **)無料のbitbucket/githupまたは任意のresporitoryにコミットすることができます*最終的にモジュールの結果を 'python package index'(http://pypi.python.org/pypi)にアップロードすることで、pypi packagemanagers(' easy_install')を含む/更新することでコード内で快適に使用できるようになります。 、 'pip'など)。 –

1

python-moneyまたはccyモジュールをご覧ください。

+1

私は両方をチェックして通貨データベースを提供していますが、通貨のマイナーユニットについては何もありません – frog32

0

私はそれが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> 
1

私が知る限り、その情報を提供するモジュールはありません。ただし、必要なデータはすべてここにリストされているようです:http://en.wikipedia.org/wiki/List_of_circulating_currencies

おそらくあなた自身のリストを維持する必要があります(最初のソースとしてwikipediaページを使用してください)。それで、あなた自身のマッピングを行うことはかなり簡単です。

ここから始めるには、簡単にハックしましょう。貼り付け、そのWikipediaのページ上のコンテンツを解析し、ページへのデータののpython-優しいバージョン追加しながら、お使いのブラウザのJavaScriptコンソールで次のスクリプトを実行している:

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")); 

は、ここでのFirebugを使用した出力例(スクリプトの実行です):ここでは

は出力です:パイソンのhttps://gist.github.com/16d43be2652a06cf962d

1

ロケールモジュールはなく、唯一の番目の通貨について、あなたはそれらの情報を与えることができますあなたが使用しているロケールは、残念ながら複数通貨にはなりません。

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 ' 

しかし、あなたは他のあなたは/あなたのテーブルに自分自身を維持するために必要があります言ったように、すべての通貨を処理するために必要がある場合。 http://pastebin.com/K7kVXi8P

保存し、プロジェクト内のモジュールにこのペーストビン(例えばsimple_currency_helper:

+0

は小さなユニットの5つに分割された2つの通貨があるという唯一の欠陥があります。私はPythonはこれらのロケール設定をサポートしていないようだので、私はこのソリューションを検討します – frog32

+0

この答えは、次の小さな単位の5に分割されている通貨のため、技術的に正しいものではありません。しかし、私はおそらくこのソリューションを使用しているので、私はこれらの通貨をサポートしていません – frog32

0

数年以来、iso4217 packageがあります。

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) 

>>> import iso4217 
>>> iso4217.Currency(u'EUR').exponent 
2 

あなたは、大小の通貨との間で直接変換するためにそれを使用することができます:それは、主要な通貨単位あたりのマイナー通貨単位の数のISO小数点/ベース-10指数を提供しますマイナー通貨としてベース10を使用しない通貨がいくつかあることに注意してください。現在、これらはMRUMGAです。 ISO 4217は依然として指数1でそれらを表しており、iso4217パッケージも同様です。

関連する問題