What class should I use for representation of money to avoid most rounding errors?
Should I use Decimal
, or a simple built-in number
?
Is there any existing Money
class with support for currency conversion that I could use?
Any pitfalls that I should avoid?
Never use a floating point number to represent money. Floating numbers do not represent numbers in decimal notation accurately. You would end with a nightmare of compound rounding errors, and unable to reliably convert between currencies. See Martin Fowler's short essay on the subject.
If you decide to write your own class, I recommend basing it on the decimal data type.
I don't think python-money is a good option, because it wasn't maintained for quite some time and its source code has some strange and useless code, and exchanging currencies is simply broken.
Try py-moneyed. It's an improvement over python-money.