2012-08-07 3 views
5

में एक नैन फ्लोट स्वरूपण मैं एक 'नैन' फ्लोट पर string.format का उपयोग करने की कोशिश कर रहा हूं।पायथन

python documentation से 'जी' विकल्प का विवरण यहां दिया गया है।

सामान्य प्रारूप। यह संख्या को एक निश्चित-बिंदु संख्या के रूप में प्रिंट करता है, जब तक कि संख्या बहुत बड़ी न हो, उस स्थिति में यह 'ई' एक्सपोनेंट नोटेशन पर स्विच हो जाता है। इन्फिनिटी और NaN मान क्रमशः inf, -inf और nan के रूप में स्वरूपित होते हैं।

>>> print "{0:g}".format(float('nan')) 
-1.#IND 

मैं प्रलेखन को समझने के रूप में, उत्पादन किया जाना चाहिए "नेन":

और यहाँ मैं क्या दुभाषिया में यह कोशिश कर पाने (अजगर 2.6) है।

क्या यह एक बग है या क्या मैं इसे गलत कर रहा हूं?

+0

क्या मंच और अजगर का कौन सा संस्करण उपयोग कर रहे हैं? – ecatmur

+1

प्लेटफ़ॉर्म का विंडोज 7 और पायथन बनाम 2.6.6 (32-बिट) – Chris

उत्तर

7

repr(float) पायथन 2.6 और पायथन 3.0 में तय किया गया था; http://bugs.python.org/issue1635 देखें; हालांकि str.format 2.7 शाखा तक तय नहीं किया गया था; http://hg.python.org/cpython/rev/c5e0d9beebf9 और http://bugs.python.org/issue1580 देखें।

मैं यह देखने की सिफारिश करता हूं कि "{0!r}" आपके लिए काम करता है; को गैर-टूटे repr कोड में कॉल करना चाहिए।

आप "{0:g}" प्रारूप कल्पना उपयोग करने की आवश्यकता है, तो आप float और अधिभावी __format__ उपवर्गीकरण की कोशिश कर सकते:

class FixFloat(float): 
    def __format__(self, format_spec): 
     return 'nan' if math.isnan(self) else float.__format__(self, format_spec) 

"{0:g}".format(FixFloat(1.2345e9)) 
'1.2345e+09' 
"{0:g}".format(FixFloat(float('nan'))) 
'nan' 
+0

मैं पायथन 2.6 का उपयोग कर रहा हूं। क्या आप अपना उत्तर थोड़ा और विकसित करना चाहते हैं? – Chris

+0

क्या बग में सूचीबद्ध 'संस्करण' संस्करण उन संस्करणों की रिपोर्ट करते हैं जहां यह खोजा गया था, या जिन संस्करणों को यह तय किया गया था? मुझे पूर्व पर संदेह है। यह 2.7 में मेरे लिए काम करता है। –

+0

@Chris ऐसा लगता है कि 'str.format' एक अलग फिक्स था। – ecatmur