2011-06-20 11 views
5

This question पाइथन में वैज्ञानिक नोटेशन को दबाने के लिए कहता है।अतिरिक्त अंक जोड़ने के बिना पाइथन में वैज्ञानिक नोटेशन प्रिंट करने से कैसे बचें?

मेरे पास प्रदर्शित करने के लिए संख्याओं की एक श्रृंखला है - 10 की छोटी शक्तियां - और मैं उन्हें पीछे की ओर शून्य के बिना प्रदर्शित करना चाहता हूं। अर्थात। 0.1, 0.01, और इतने पर 0.000001

यदि मैं "%s" % 10 ** -6 करता हूं तो मुझे '1e-06' मिलता है। अगर मैं "%f" % 10 ** -6 का उपयोग करता हूं तो मुझे '0.000001' मिलता है जो मैं चाहता हूं।

हालांकि, "%f" % 10 ** -3'0.001000' उत्पन्न करता है जो "पीछे की ओर शून्य" बाधा का उल्लंघन करता है।

इस (रेगेक्स प्रतिस्थापन या कुछ) के आसपास बल को बल देना मुश्किल नहीं है, लेकिन मुझे आश्चर्य है कि कुछ स्वरूप स्ट्रिंग जादू है जो मुझे याद आ रही है।

उत्तर

7

यह मेरे लिए एक छोटे से hacky लगता है, लेकिन आप अनुगामी शून्य से छुटकारा पाने के str.rstrip("0") उपयोग कर सकते हैं:

>>> "{:f}".format(10**-6).rstrip("0") 
'0.000001' 
>>> "{:f}".format(10**-3).rstrip("0") 
'0.001' 

संपादित करें:

>>> format(1e-6, 'f').rstrip('0') 
'0.000001' 
>>> format(1e-3, 'f').rstrip('0') 
'0.001' 
: जैसा कि टिप्पणी में कहा, इस के लिए एक बेहतर तरीका है
+0

ओपी को "ब्रूट फोर्स" के रूप में संदर्भित किया गया है *, इसलिए यह वास्तविक जवाब नहीं है (-1)। हालांकि, मैं इसे भी इस तरह से करूंगा (+1)। –

+0

+1। यह बिल्कुल हैकी नहीं है। शायद 'प्रारूप()' फ़ंक्शन का उपयोग करना एक छोटा सा क्लीनर है: 'प्रारूप (1e-6,' f ')। Rstrip (' 0 ') '। –

+0

@ ओबेन सोनने, लेकिन रेगेक्स का उपयोग करने से कहीं बेहतर है। @ फ़र्डिनेंड बेयर, धन्यवाद, मुझे यह नहीं पता था, जवाब संशोधित करना। – utdemir

2

सरल rstrip("0") अच्छी तरह से छोटे और कुछ अन्य मानों का प्रबंधन नहीं है, यह दशमलव बिंदु के बाद एक शून्य छोड़ देना चाहिए - 0.00. के बजाय:

01,235,
def format_float(value, precision=-1): 
    if precision < 0: 
     f = "%f" % value 
    else: 
     f = "%.*f" % (precision, value) 

    p = f.partition(".") 

    s = "".join((p[0], p[1], p[2][0], p[2][1:].rstrip("0"))) 

    return s 

print(format_float(3e-10)) 
print(format_float(3e-10, 20)) 
print(format_float(1.5e-6)) 
print(format_float(1.5e+6)) 
संबंधित मुद्दे