質問

ほとんどの丸めエラーを回避するために、お金の表現にどのクラスを使用する必要がありますか?

Decimal を使用するべきですか、それとも簡単な組み込みの number を使用するべきですか?

通貨変換をサポートする既存の Money クラスはありますか?

避けるべき落とし穴はありますか?

役に立ちましたか?

解決

あなたはPythonについて話していると思います。 http://code.google.com/p/python-money/ " Pythonでお金と通貨を操作するためのプリミティブ" -タイトルは自明です:)

他のヒント

お金を表すために浮動小数点数を使用しないでください。浮動小数点数は、10進表記の数値を正確に表しません。複合丸め誤差の悪夢で終わり、通貨間の信頼性の高い変換ができなくなります。 Martin Fowlerの主題に関する短いエッセイを参照してください。

独自のクラスを作成する場合は、に基づいて作成することをお勧めしますdecimal データ型。

python-moneyは長い間維持されておらず、そのソースコードには奇妙で役に立たないコードがあり、通貨の交換は単純に壊れているため、python-moneyは良い選択肢ではないと思います。

py-moneyed をお試しください。 python-moneyよりも改善されています。

10進数を使用するだけです。

金融を扱うための QuantLib に興味があるかもしれません。

通貨タイプを処理するためのクラスが組み込まれており、4年間の積極的な開発を主張しています。

次のライブラリをご覧ください: python-money 。経験がないので、その有用性についてコメントすることはできません。

通貨を整数として処理するために使用できる「トリック」:

  • 100で乗算/ 100で除算(例:$ 100,25-> 10025)して、「セント」で表現します

シンプルで軽量、しかも拡張可能なアイデア:

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)

次のことができます:

  • アプリケーションで必要なものだけを実装します。
  • 成長するにつれて拡張します。
  • 必要に応じて内部表現と実装を変更します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top