ほとんどの丸め誤差を回避するために、お金の表現にどのクラスを使用する必要がありますか?
Decimal
を使用する必要がありますか、それとも単純な組み込みのnumber
を使用する必要がありますか?
使用できる通貨換算をサポートする既存のMoney
クラスはありますか?
避けるべき落とし穴はありますか?
あなたがPythonについて話していると思います。 http://code.google.com/p/python-money/ "Pythonでお金と通貨を操作するためのプリミティブ"-タイトルは自明です:)
お金を表すために浮動小数点数を使用しないでください。浮動小数点数は、10進表記の数を正確に表していません。複合丸め誤差の悪夢で終わり、通貨間で確実に変換できなくなります。 この主題に関するMartin Fowlerの短いエッセイ を参照してください。
独自のクラスを作成する場合は、 decimal データ型に基づいて作成することをお勧めします。
Python-moneyはかなり長い間維持されておらず、そのソースコードには奇妙で役に立たないコードがあり、通貨の交換が単純に壊れているため、python-moneyは良い選択肢ではないと思います。
py-moneyed を試してください。これは、python-moneyよりも改善されています。
decimal を使用してください。
あなたは QuantLib 金融で働くことに興味があるかもしれません。
通貨タイプを処理するためのクラスが組み込まれており、4年間の活発な開発を主張しています。
このライブラリを見ることができます: python-money 。私はそれを使った経験がないので、その有用性についてコメントすることはできません。
通貨を整数として処理するために使用できる「トリック」:
シンプルで軽量でありながら拡張可能なアイデア:
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)
あなたはできる: