2013-07-25 41 views
0

在Django項目上工作。 在我的支付模式我有一個簡單的高清保存制定正確的貨幣面額的變化

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我想退貨變化

  • ×200
  • ×5
  • 1x0.5

我想要做的是將amount_change細分爲我擁有的貨幣面值,然後使用正確的鈔票和硬幣將更改返回給客戶。 我的面值是[200,100,50,20,10,5,1,0.5]

我該如何去做這件事? 任何幫助表示讚賞。

+0

你有沒有嘗試過任何東西? – Verma

+0

這個答案看起來像它讓你有:http://stackoverflow.com/a/621133/631348 –

+0

@ScottWoodall看起來很有前途。我不認爲它會管理0.5到 – darren

回答

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

+0

感謝您的幫助。我認爲另一種方法是使用你指向我的另一種方法,只是將所有東西都推到cent值以便沒有分數。但是,您的解決方案更加優雅。 – darren