2013-04-19 6 views
24

मैं सिर्फ सीखने वाले वर्गों के कार्यों के आसपास खेल रहा हूं, इसलिए मैंने एक साधारण कार्य करने का फैसला किया जो मुझे कर राशि देनी चाहिए।* के लिए असमर्थित ऑपरेंड प्रकार *: 'फ्लोट' और 'दशमलव'

यह मेरा कोड अब तक है ...

class VAT_calculator: 
    """ 
    A set of methods for VAT calculations. 
    """ 

    def __init__(self, amount=None): 
     self.amount = amount 
     self.VAT = decimal.Decimal('0.095') 

    def initialize(self): 
     self.amount = 0 

    def total_with_VAT(self): 
     """ 
     Returns amount with VAT added. 
     """ 
     if not self.amount: 
      msg = u"Cannot add VAT if no amount is passed!'" 
      raise ValidationError(msg) 

     return (self.amount * self.VAT).quantize(self.amount, rounding=decimal.ROUND_UP) 

मेरे मुद्दा मैं निम्नलिखित त्रुटि मिल रही है: 'नाव' और ': * के लिए

असमर्थित संकार्य प्रकार (ओं) दशमलव '

मुझे नहीं पता कि यह क्यों काम नहीं करना चाहिए!

उत्तर

30

ऐसा लगता है self.VAT तरह decimal.Decimal प्रकार का है और self.amount एक float, बात यह है कि आप ऐसा नहीं कर सकते है।

इसके बजाय decimal.Decimal(self.amount) * self.VAT आज़माएं।

+0

फ्लोट, दशमलव, वही बात थी? मुद्रा के लिए मुझे क्या उपयोग करना चाहिए? – Prometheus

+1

यह दूसरी तरफ है; 'self.VAT = दशमलव। दशमलव (' 0.095 ') '। –

+2

@ स्पाइक: नहीं, 'दशमलव। डेसीमल()' 'फ्लोट 'जैसी ही नहीं है। कंप्यूटर द्वारा वास्तविक संख्याओं को संभालने के लिए यह एक अलग दृष्टिकोण है। –

5

आपका मुद्दा है, जैसा कि त्रुटि का कहना है, कि तुम एक float

सरल समाधान amount के लिए किसी भी संदर्भ एक दशमलव वस्तु के रूप में यह घोषित करने के पुनर्लेखन के लिए है द्वारा एक Decimal गुणा करने के लिए कोशिश कर रहे हैं:

self.amount = decimal.Decimal(float(amount))

और initialize में:

self.amount = decimal.Decimal('0.0')

एक अन्य विकल्प अपने अंतिम पंक्ति में दशमलव घोषित करने के लिए होगा:

return (decimal.Decimal(float(self.amount)) * self.VAT).quantize(decimal.Decimal(float(self.amount)), rounding=decimal.ROUND_UP)

... लेकिन यह है कि मेसियर लगता है।

संबंधित मुद्दे