什么类的我应该使用代表性的金钱,以避免大多数四舍五入错误?

我应该使用 Decimal, 或者一个简单的内在 number?

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

任何缺陷,我应该避免?

有帮助吗?

解决方案

我假设您在谈论Python。 http://code.google.com/p/python-money/ “在Python中使用货币和货币的原语” - 标题是自我解释的:)

其他提示

切勿使用浮点数来代表金钱。浮动数字不能准确表示十进制表示法中的数字。你会以复合舍入错误的噩梦结束,并且无法在货币之间可靠地转换。请参阅 Martin Fowler关于该主题的短文

如果您决定编写自己的课程,我建议您将其基于十进制数据类型。

我不认为python-money是一个不错的选择,因为它没有维护很长一段时间,而且它的源代码有一些奇怪且无用的代码,交换货币就完全被打破了。

尝试 py-moneyed 。这是对python-money的改进。

只需使用小数即可。

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

它已经内置了处理货币类型的类,并声称有4年的积极开发。

你可以看一看这个图书馆: 蟒蛇的钱.因为我有经验我不能评论其有用性。

一个'的绝招你可以雇用于处理货币作为整数:

  • 再乘以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