ほとんどの丸め誤差を避けるために、お金の表記にどのようなクラスを使用しますか?お金の表記にはどのようなクラスを使用しますか?
Decimal
を使用するか、またはnumber
を組み込む必要がありますか?
使用可能な通貨換算をサポートする既存のMoney
クラスがありますか?
私は避けるべき落とし穴はありますか?
ほとんどの丸め誤差を避けるために、お金の表記にどのようなクラスを使用しますか?お金の表記にはどのようなクラスを使用しますか?
Decimal
を使用するか、またはnumber
を組み込む必要がありますか?
使用可能な通貨換算をサポートする既存のMoney
クラスがありますか?
私は避けるべき落とし穴はありますか?
私はあなたがPythonについて話していると仮定します。 http://code.google.com/p/python-money/ 「Pythonでお金と通貨を操作するためのプリミティブ」 - タイトルは自明です:)
このライブラリーは、python-moneyでご覧になれます。私はそれについての経験がないので、その有用性についてコメントすることはできません。
A 'トリック' あなたは整数として通貨を処理するために採用することができます:100(例えば$ 100,25 - > 10025)によって100 /除算によって
多くの会計システムは、セントよりもはるかに正確に物事を追跡します。 –
真実だが、すべてが私の思うニーズに依存している...このスレッドで参照されているquantlibライブラリは、「真剣な」財務的な仕事の良い候補のようだ。 – ChristopheD
金銭を表すために浮動小数点数を使用しないでください。浮動小数点数は十進表記の数字を正確に表していません。あなたは複合丸め誤差の悪夢で終わり、確実に通貨間の変換はできません。 Martin Fowler's short essay on the subjectを参照してください。
独自のクラスを作成する場合は、decimalデータ型に基づいてお勧めします。
python-moneyは、かなりの期間保守されておらず、ソースコードに奇妙で無用なコードがあり、通貨の交換が簡単でないため、良い選択だとは思わない。
Try py-moneyedこれは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)
次のことが可能です。
いつも私は通貨換算が単なる乗算であると思っていました。 – SilentGhost
@SilentGhost:はい、いいえ。あなたはあなたが持っている値をどのように使うのかを心に留めておく必要があります。あなたは昨年U $ S2000 + AR $ 6300 +€1500を支払ったときにどうしましたか?今年あなたはU $ S4000 + AR $ 1200 +€500を支払ったのですか?あなたが考慮しなければならないことがたくさんあるので、 'Money'オブジェクトは履歴値*と*現在の値を保存する必要があります。 – voyager
回避すべき落とし穴:浮動小数点数の使用。 Office Spaceを参照してください。 –