制定正确的货币面额以换取变化

时间:2013-07-25 10:56:42

标签: python django model currency

在django项目上工作。 在我的付款模式上,我有一个简单的def保存

def save(self, *args, **kwargs):
    self.amount_change = self.amount_due - self.amount_paid
    return super(Payment, self).save(*args, **kwargs)

如果我的amount_change来-455.50,我想将更改返回

  • 2x200
  • 1x50
  • 1x5
  • 1x0.5

我想做的是将amount_change分解为我所拥有的货币面额,并将更改返回给客户并附上正确的纸币和/或硬币。 我的面额是[200,100,50,20,10,5,1,0.5]

我该怎么做呢? 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

this answer的基础上,我相信这会带来预期的结果:

from collections import Counter

def change(amount):
    money = ()

    for coin in [200, 100, 50, 20, 10, 5, 1, 0.5]:
        num = int(amount/coin)
        money += (coin,) * num
        amount -= coin * num

    return Counter(money)

输入和输出:

>>> c = change(455.50)
>>> print c
Counter({200: 2, 0.5: 1, 50: 1, 5: 1})

编辑:如果您需要传入一个负数,请在函数内创建一个新变量乘以-1并在函数内使用它而不是amount