2011-06-26 24 views
6

कुछ कारणों से दशमलव वस्तु गुणा होने पर सटीकता को खो देती है। ऐसा होने का कोई कारण नहीं है। कृपया टेस्टकेस की जांच करें और मुझे प्रबुद्ध करें।पायथन दशमलव सटीक

from decimal import * 
getcontext().prec = 11 

a = Decimal('5085.28725881485') 
b = 1 

print getcontext() 
print 'a  = '+str(a) 
print 'b  = '+str(b) 
print 'a * b = '+str(a * b) 

और उत्पादन:

Context(prec=11, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[DivisionByZero, InvalidOperation, Overflow]) 
a  = 5085.28725881485 
b  = 1 
a * b = 5085.2872588 

सुनिश्चित नहीं हैं कि अगर यह प्रासंगिक है, लेकिन python2.6 इस्तेमाल किया। जब गणना प्रदर्शन, decimal.Decimal वस्तुओं बनाते समय नहीं

+0

आपने परिशुद्धता 11 को सेट की है, और आपके परिणाम में 11 महत्वपूर्ण आंकड़े हैं। समस्या क्या है? –

+0

बिंदु के बाद सटीक मतलब संख्या नहीं है? – marrat

+2

तब बिंदु के बाद संख्या को सटीक सीमा तक सीमित करने का कोई तरीका है? – marrat

उत्तर

11

परिशुद्धता आप संदर्भ (11 स्थान) में निर्दिष्ट केवल लागू किया जाता है - और परिणाम, 5085.2872588 वास्तव में उस सीमा का पालन करना होता है। 1 का उपयोग करके गुणक परिशुद्धता के संबंध में नियमों को नहीं बदलता है; अंकगणितीय परिचालन का परिणाम हमेशा सटीकता को मानता है।

यदि आप decimal.Decimal की तलाश कर रहे थे तो किसी विशेष स्थान पर गोल किए गए नंबर को वापस करने के लिए, create_decimal संदर्भ ऑब्जेक्ट की विधि आपके लिए यह करेगी।

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