2012-09-04 72 views
10

nhà cung cấp thẻ tín dụng cần số tiền giao dịch bằng đơn vị tiền tệ hoặc đơn vị tiền tệ nhỏ nhất có sẵn. vì tôi muốn mã được di chuyển Tôi phải lấy đơn vị nhỏ nhất của một loại tiền nhất định và nó là nhân tố của đơn vị chính. Tôi đã cố gắng để có được nó từ các mô-đun miền địa phương nhưng tôi đã không có may mắn.lấy đơn vị nhỏ nhất của đơn vị tiền tệ trong python

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

Ví dụ

tôi có một mã tiền tệ như mô tả trong iso 4217

EUR cho Euro

sau đó tôi cần 1 Euro là 100 xu Euro (chỉ thông tin 1/100, không cần văn bản)

accordi ng đến wikipedia có các đơn vị tiền tệ có hơn 2 đơn vị như pund cũ sterling

+0

Bạn có thể cho chúng tôi một ví dụ về những gì bạn có và những gì bạn đang mong đợi? –

+2

Đánh giá bởi những người upvotes, nó phải được rõ ràng cho những người khác những gì bạn đang yêu cầu. Tuy nhiên, tôi nghĩ câu hỏi này có thể sử dụng một ví dụ –

+2

Có vẻ như bạn sẽ phải biên dịch bảng của riêng mình và cập nhật nó. – deStrangis

Trả lời

3

Ngoài ra cou có thể sử dụng sau đây mô-đun bản đồ đơn giản: http://pastebin.com/K7kVXi8P

Lưu pastebin này thành một mô-đun trong dự án của bạn (ví dụ simple_currency_helper.py) và sử dụng bản đồ (hoặc phương thức trợ giúp get_currency_subunit) để lấy tiểu đơn vị tiền tệ cho một Mã ISO nhất định.

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

này có thể làm việc nhưng tôi không thích ý tưởng duy trì danh sách này trong mã của tôi – frog32

+1

Sau đó: D cảm thấy tự do để thực hiện một trăn thực dự án dựa trên pastebin này (tôi không tuyên bố quyền lợi) và cam kết này ** a) ** cho bitbucket/githup miễn phí hoặc bất kỳ sự tôn trọng nào để cộng đồng có thể/sẽ/có thể duy trì nó và ** b) * * Cuối cùng tải kết quả mô-đun lên 'python package index' (http://pypi.python.org/pypi) để bạn cũng có thể sử dụng nó một cách thoải mái trong mã của bạn bằng cách thêm/cập nhật với pypi packagemanagers (' easy_install' , 'pip', v.v.). –

1

Bạn có thể xem mô hình python-money hoặc ccy.

+1

tôi đã kiểm tra cả hai và chúng cung cấp một cơ sở dữ liệu tiền tệ nhưng không có gì về đơn vị nhỏ của đơn vị tiền tệ – frog32

0

tôi không biết nếu nó tồn tại cho python. chúng tôi đã từng làm việc với số điện thoại xml này.

<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

Theo tôi biết, không có mô-đun thoát sẽ cung cấp cho bạn thông tin đó. Tuy nhiên, tất cả dữ liệu bạn cần dường như được liệt kê ở đây: http://en.wikipedia.org/wiki/List_of_circulating_currencies

Có thể bạn sẽ cần duy trì danh sách của riêng mình (sử dụng trang wikipedia làm nguồn ban đầu). Sau đó, nó sẽ trở nên hợp lý để lập bản đồ của riêng bạn.

Để giúp bạn bắt đầu, đây là một bản hack nhanh. Dán và chạy kịch bản sau đây trong bảng điều khiển Javascript của trình duyệt trong khi trên trang wikipedia sẽ phân tích nội dung và thêm vào trang một phiên bản python thân thiện với các dữ liệu:

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

Đây là ví dụ đầu ra (script chạy bằng Firebug):

Dưới đây là kết quả: https://gist.github.com/16d43be2652a06cf962d

1

các module locale của python có thể cung cấp cho bạn những thông tin, nhưng chỉ cho tiền tệ của thứ địa phương bạn đang sử dụng, tiếc là nó không phải là đa tiền tệ.

locale.localconv() có thể cung cấp cho bạn thông tin cho ngôn ngữ hiện tại (số chữ số là thành viên 'int_frac_digits'). Ví dụ, nếu bạn đang cục bộ với en_US bạn có thể làm điều này:

locale.setlocale(locale.LC_MONETARY, "en_US") # set the en_US locale 
locale.localeconv()['int_frac_digits'] 
>>> 2 
locale.localeconv()['int_curr_symbol'] 
>>> 'USD ' 

Nhưng nếu bạn cần để xử lý tất cả các đồng tiền, như người kia nói rằng bạn sẽ phải làm/duy trì bảng của bạn mình.

+0

có lỗ hổng duy nhất có hai loại tiền tệ được chia thành 5 của đơn vị nhỏ hơn. nhưng tôi sẽ xem xét giải pháp này kể từ khi tôi python dường như không hỗ trợ các thiết lập miền địa phương – frog32

+0

câu trả lời này không phải là chính xác về mặt kỹ thuật vì tiền tệ được chia thành 5 của đơn vị nhỏ hơn tiếp theo. nhưng tôi có lẽ gona dính với giải pháp này kể từ khi dịch vụ tôi đang bao gồm không hỗ trợ những loại tiền tệ – frog32

0

Vì một vài năm, có iso4217 package. Nó cung cấp các tiêu chuẩn ISO dấu thập phân/cơ số 10 mũ cho số đơn vị nhỏ tệ trên một đơn vị tiền tệ chính:

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

Bạn có thể sử dụng nó để chuyển đổi trực tiếp giữa nhỏ và lớn tệ:

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) 

Lưu ý rằng có một số loại tiền tệ không sử dụng cơ sở-10 cho loại tiền nhỏ của chúng. Hiện tại, đây là MRUMGA. ISO 4217 vẫn đại diện cho chúng với số mũ 1 và gói iso4217 cũng vậy.

Các vấn đề liên quan