python - pyplot - ¿Qué clase usar para la representación del dinero?
plot title python (6)
¿Qué clase debo usar para la representación del dinero para evitar la mayoría de los errores de redondeo?
¿Debo usar Decimal
, o un simple número incorporado?
¿Existe alguna clase de Money
con soporte para conversión de moneda que pueda usar?
¿Alguna trampa que deba evitar?
Idea simple, liviana, pero extensible:
class Money():
def __init__(self, value):
# internally use Decimal or cents as long
self._cents = long(0)
# Now parse ''value'' as needed e.g. locale-specific user-entered string, cents, Money, etc.
# Decimal helps in conversion
def as_my_app_specific_protocol(self):
# some application-specific representation
def __str__(self):
# user-friendly form, locale specific if needed
# rich comparison and basic arithmetics
def __lt__(self, other):
return self._cents < Money(other)._cents
def __add__(self, other):
return Money(self._cents + Money(other)._cents)
Usted puede:
- Implemente solo lo que necesite en su aplicación.
- Extiéndelo a medida que crezcas.
- Cambiar la representación interna y la implementación según sea necesario.
Nunca use un número de punto flotante para representar el dinero. Los números flotantes no representan números en notación decimal con precisión. Terminaría con una pesadilla de errores de redondeo compuestos y no podría convertir de manera confiable entre monedas. Ver el breve ensayo de Martin Fowler sobre el tema .
Si decide escribir su propia clase, le recomiendo basarla en el tipo de datos decimal .
No creo que Python-money sea una buena opción, ya que no se mantuvo durante bastante tiempo y su código fuente tiene un código extraño e inútil, y el intercambio de monedas simplemente está roto.
Pruebe py-moneyed . Es una mejora sobre el dinero de pitón.
Puede estar interesado en QuantLib para trabajar con finanzas.
Ha incorporado clases para el manejo de tipos de moneda y reclamos de 4 años de desarrollo activo.
Puedes echar un vistazo a esta biblioteca: http://code.google.com/p/python-money/ . Como no tengo experiencia con él, no puedo comentar sobre su utilidad.
Un ''truco'' que podrías emplear para manejar la moneda como enteros:
- Multiplique por 100 / Divida por 100 (por ejemplo, $ 100,25 -> 10025) para tener una representación en ''centavos''
Sólo tiene que utilizar decimal .
Supongo que estás hablando de Python. http://code.google.com/p/python-money/ "Primitivas para trabajar con dinero y monedas en Python": el título se explica por sí mismo :)