使用什么类的钱代表性?(What class to use for money representa

2019-07-17 15:51发布

我应该使用什么类的钱表示,以避免最舍入误差?

我应该使用Decimal ,或一个简单的内置number

是否有任何现有Money与我可以使用的货币转换支持类?

我应该避免任何陷阱?

Answer 1:

我假设你是Python。 http://code.google.com/p/python-money/ “在Python中金钱和货币工作原型” -标题是自我解释:)



Answer 2:

切勿使用浮点数来表示钱。 浮点数不十进制准确地表示数字。 你会用复合舍入误差的噩梦,并且无法可靠货币之间的转换结束。 见Martin Fowler的关于这个问题的短文 。

如果您决定写自己的类,我建议基于此的十进制数据类型。

我不认为Python,钱是一个很好的选择,因为它不是维持相当长的一段时间,它的源代码有一些奇怪的和无用的代码,并交换货币简直是坏了。

尝试PY-有钱 。 它结束了蟒蛇钱的改善。



Answer 3:

只要使用十进制 。



Answer 4:

您可能会感兴趣的QuantLib与金融合作。

它内置了类处理的货币种类和要求4年的积极发展。



Answer 5:

你可以看看这个库: 蟒蛇钱 。 因为我已经与它没有任何经验,我不能在它的有用性发表意见。

A“绝招”,你可以使用来处理货币作为整数:

  • 由100 /除法乘以100(例如$ 100,25 - > 10025),以具有在“美分”表示


Answer 6:

简单,重量轻,但可扩展的想法:

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)

您可以:

  • 只有你在你的应用程序所需要的实现。
  • 当你长大扩展它。
  • 根据需要更改内部表示和实施。


文章来源: What class to use for money representation?