2012-09-04 18 views
10

un proveedor de tarjeta de crédito necesita el monto de la transacción en centavos o la unidad disponible más pequeña de la moneda. dado que quiero que el código sea portátil, tengo que obtener la unidad más pequeña de una moneda determinada y su factor en la unidad principal. Intenté obtenerlo del módulo de configuración regional, pero no tuve suerte.obtener la unidad más pequeña de una moneda en python

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

Ejemplo

i tiene un código de moneda como se describe en iso 4217

de euros para Euro

entonces necesito 1 Euro es de 100 céntimos de euro (sólo la información 1/100, no se necesita texto)

accordi ng a wikipedia hay monedas que tienen más de 2 unidades como la antigua libra esterlina

+0

¿Podría darnos un ejemplo de lo que tiene y de lo que espera? –

+2

A juzgar por los votos a favor, debe quedar claro para los demás lo que está preguntando. Sin embargo, creo que esta pregunta podría usar un ejemplo –

+2

Parece que tendrá que compilar su propia tabla y mantenerla actualizada. – deStrangis

Respuesta

3

Alternativamente COU puede utilizar después de módulo de asignación simple: http://pastebin.com/K7kVXi8P

Guardar este Pastebin en un módulo dentro de su proyecto (por ejemplo simple_currency_helper.py) y utilice el mapa (o el método de ayuda get_currency_subunit) para obtener la subunidad de moneda para un determinado código ISO.

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

esto podría funcionar, pero no me gusta la idea de mantener esta lista en mi código – frog32

+1

Entonces: D siéntete libre de hacer una verdadera pitón proyecto basado en este pastebin (no reclamo tener derecho a él) y confirme esto ** a) ** a un bitbucket/githup gratuito o cualquier resporitory para que la comunidad pueda/quiera/pueda mantenerlo y ** b) * * finalmente carga el resultado del módulo al 'python package index' (http://pypi.python.org/pypi) para que también puedas usarlo cómodamente en tu código incluyendo/actualizando con pypi packagemanagers (' easy_install' , 'pip', etc.). –

1

Puede consultar el módulo python-money o ccy.

+1

analicé ambos y proporcionan una base de datos de divisas, pero nada sobre la unidad menor de la moneda – frog32

0

no sé si existe para python. solíamos trabajar con este 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

Por lo que sé, no hay un módulo de salida que le proporcione esa información. Sin embargo, todos los datos que necesita aparecen en una lista aquí: http://en.wikipedia.org/wiki/List_of_circulating_currencies

Probablemente necesite mantener su propia lista (utilizando la página de wikipedia como fuente inicial). Sería razonablemente sencillo hacer tu propio mapeo.

Para empezar, he aquí un truco rápido. Pegar y ejecutar el script siguiente en la consola JavaScript de su navegador mientras en esa página Wikipedia analizará el contenido y añadir a la página de una versión de python-amigable de los datos:

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

He aquí un ejemplo de salida (secuencia de comandos ejecutada usando Firebug):

Aquí está la salida: https://gist.github.com/16d43be2652a06cf962d

1

el módulo de configuración regional del pitón le puede dar esas informaciones, pero sólo para la moneda de l La configuración regional que está utilizando, desafortunadamente no está hecha para ser de múltiples monedas.

locale.localconv() puede darle la información para la configuración regional actual (el número de dígitos es el miembro 'int_frac_digits'). Por ejemplo, si usted está localizada con en_US usted puede hacer esto:

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

Pero si usted necesita para manejar todas las monedas, como el otro dijo que tendrá que hacer/mantener su mesa usted mismo.

+0

tiene el único defecto de que hay dos monedas que se dividen en 5 de la unidad más pequeña. pero consideraré esta solución ya que i python no parece soportar estas configuraciones de configuración regional – frog32

+0

esta respuesta no es técnicamente correcta debido a las monedas que están divididas en 5 de la siguiente unidad más pequeña. pero probablemente me quedo con esta solución ya que el servicio que estoy incluyendo no es compatible con esas monedas – frog32

0

Desde hace algunos años, está el iso4217 package. Se proporciona el punto decimal ISO/base-10 exponente para el número de unidades de moneda de menor importancia por importante unidad monetaria:

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

Se puede utilizar para convertir directamente entre pequeños y grandes divisa:

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) 

Tenga en cuenta que hay algunas monedas que no usan base-10 para su moneda menor. Actualmente, estos son MRU y MGA. ISO 4217 todavía los representa con el exponente 1, y el paquete iso4217 también lo hace.

Cuestiones relacionadas