2009-01-02 19 views
5

मेरे कोड:फ्लोटिंग प्वाइंट सीमाएं

a = '2.3' 

मैं a एक चल बिन्दु मान के रूप में प्रदर्शित करने के लिए करना चाहता था।

a के बाद से एक स्ट्रिंग है, मैंने कोशिश की:

float(a) 

परिणाम मुझे मिल गया था:

2.2999999999999998 

मैं इस समस्या के लिए एक समाधान चाहते हैं। कृपया, कृपया मेरी मदद करें।

मैं this tutorial का पालन कर रहा था।

+0

@ rejinacm.myopenid.com: आप टिप्पणी को हटाना चाहेंगे "यह पायथन की कमी है।" ! –

+8

-1 उन फिक्रों के लिए जिन्होंने इसे ठीक करने के बजाय इस प्रश्न को कम किया! –

+1

डुप्लिकेट: http://stackoverflow.com/questions/286061/python-decimal-place-issues-with-floats, http://stackoverflow.com/questions/286061/python-decimal-place-issues-with-floats –

उत्तर

18

मुझे लगता है कि यह पाइथन की तुलना में फ़्लोटिंग पॉइंट प्रकारों की आपकी समझ पर अधिक प्रतिबिंबित करता है। इस "गलतता" के पीछे कारणों के लिए my article about floating point numbers (.NET- आधारित, लेकिन अभी भी प्रासंगिक) देखें। यदि आपको सटीक दशमलव प्रतिनिधित्व रखने की आवश्यकता है, तो आपको decimal module का उपयोग करना चाहिए।

+0

दशमलव एक स्ट्रिंग देता है। मुझे केवल एक फ्लोट प्रकार चाहिए। – user46646

+0

@rejinacm - फ्लोट प्रकार सटीक नहीं हैं, आपका पेपर वास्तव में अंत में यह समझाता है और बताता है कि ऐसा क्यों होता है। –

+0

दशमलव एक स्ट्रिंग को "वापस नहीं" करता है - आप * इसे एक स्ट्रिंग में परिवर्तित कर सकते हैं, लेकिन दशमलव मान केवल एक मान है, जिसे आप अलग-अलग तरीके से जोड़ सकते हैं। यदि आपको वास्तव में किसी भी कारण से फ़्लोट की आवश्यकता है, तो आपको स्वीकार करना होगा कि आप इसमें बिल्कुल 2.3 का प्रतिनिधित्व करने में सक्षम नहीं होंगे। –

6

यह अजगर की कमी नहीं है, बल्कि यह कंप्यूटर पर फ़्लोटिंग पॉइंट नंबरों को संग्रहीत करने का तरीका है। कार्यान्वयन भाषा के बावजूद, आपको समान समस्याएं मिलेंगी।

आप कहते हैं कि आप एक फ्लोटिंग पॉइंट के रूप में 'प्रदर्शित' करना चाहते हैं, क्यों न केवल स्ट्रिंग प्रदर्शित करें? दृश्यमान यह वही होगा जो आप उम्मीद करते हैं।

जैसा कि जॉन ने उल्लेख किया है, यदि आपकी ज़रूरतें फ्लोटिंग पॉइंट नंबर को 'प्रदर्शित' करने से अधिक हैं, तो आपको सटीक प्रतिनिधित्व को स्टोर करने के लिए दशमलव मॉड्यूल का उपयोग करना चाहिए।

4

उत्कृष्ट कारण बताते हुए उत्कृष्ट उत्तर। मैं बस मानक पुस्तकालय से एक संभावित व्यावहारिक समाधान जोड़ना चाहता हूं:

>>> from decimal import Decimal 
>>> a = Decimal('2.3') 
>>> print a 
2.3 

यह वास्तव में एक (बहुत) एफएक्यू है। पायथन के लिए और आप read the answer here कर सकते हैं।


संपादित करें: मैंने अभी देखा है कि जॉन स्कीट ने पहले ही इसका उल्लेख किया है। ओह ठीक है ...