我应该使用什么类的钱表示,以避免最舍入误差?
我应该使用Decimal
,或一个简单的内置number
?
是否有任何现有Money
与我可以使用的货币转换支持类?
我应该避免任何陷阱?
我应该使用什么类的钱表示,以避免最舍入误差?
我应该使用Decimal
,或一个简单的内置number
?
是否有任何现有Money
与我可以使用的货币转换支持类?
我应该避免任何陷阱?
我假设你是Python。 http://code.google.com/p/python-money/ “在Python中金钱和货币工作原型” -标题是自我解释:)
切勿使用浮点数来表示钱。 浮点数不十进制准确地表示数字。 你会用复合舍入误差的噩梦,并且无法可靠货币之间的转换结束。 见Martin Fowler的关于这个问题的短文 。
如果您决定写自己的类,我建议基于此的十进制数据类型。
我不认为Python,钱是一个很好的选择,因为它不是维持相当长的一段时间,它的源代码有一些奇怪的和无用的代码,并交换货币简直是坏了。
尝试PY-有钱 。 它结束了蟒蛇钱的改善。
只要使用十进制 。
您可能会感兴趣的QuantLib与金融合作。
它内置了类处理的货币种类和要求4年的积极发展。
你可以看看这个库: 蟒蛇钱 。 因为我已经与它没有任何经验,我不能在它的有用性发表意见。
A“绝招”,你可以使用来处理货币作为整数:
简单,重量轻,但可扩展的想法:
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)
您可以: