फ़्लोटिंग पॉइंट नंबर को एक निश्चित परिशुद्धता में बदलें, और फिर स्ट्रिंग पर कॉपी करें


144

मेरा एक फ्लोटिंग पॉइंट नंबर है, कहो 135.12345678910। मैं एक स्ट्रिंग के लिए उस मूल्य को संक्षिप्त करना चाहता हूं, लेकिन केवल चाहता हूं 135.123456789। प्रिंट के साथ, मैं आसानी से कुछ ऐसा कर सकता हूं:

print "%.9f" % numvar

numvarमेरा मूल नंबर होने के साथ । क्या इसे करने का कोई आसान तरीका है?


3
% वास्तव में ऐसा करता है -% प्रिंट फ़ंक्शन का हिस्सा नहीं है लेकिन स्ट्रिंग का - पायथन डॉक्स
michael_s

जवाबों:


177

अजगर के साथ <3 (जैसे 2.6 [टिप्पणियाँ देखें] या 2.7), ऐसा करने के दो तरीके हैं।

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

लेकिन ध्यान दें कि पायथन संस्करणों के लिए 3 से ऊपर (उदाहरण 3.2 या 3.3), विकल्प दो को प्राथमिकता दी जाती है

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

और विकल्प एक पर अधिक जानकारी के लिए, यह लिंक पर्याप्त होगा और विभिन्न झंडे पर जानकारी होगी

पायथन 3.6 (आधिकारिक तौर पर 2016 के दिसंबर में जारी किया गया), fस्ट्रिंग शाब्दिक को जोड़ा , यहां अधिक जानकारी देखें , जो str.formatविधि का विस्तार करता है (घुंघराले ब्रेसिज़ का उपयोग f"{numvar:.9f}"जो मूल समस्या को हल करता है), अर्थात्।

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

समस्या हल करता है। अधिक जानकारी के लिए @ Or-Duan का उत्तर देखें, लेकिन यह विधि तेज़ है


1
विकल्प दो होना चाहिए newer_method_string = "{:.9f}".format(numvar)- :फ़ील्ड और स्वरूपण को अलग करने के लिए आवश्यक ध्यान दें । मैंने इसका परीक्षण 2.7.5 पर किया है।
काल्टर

1
अजगर 2.6 विकल्प दो के लिए होना चाहिए newer_method_string = "{0:.9f}".format(numvar)- इस पुराने संस्करण के लिए field_name के लिए आवश्यक 0 नोट करें।
ttq

56

अजगर 3.6

बस इसे स्पष्ट करने के लिए, आप एफ-स्ट्रिंग प्रारूपण का उपयोग कर सकते हैं । यह formatविधि के रूप में लगभग एक ही वाक्यविन्यास है , लेकिन इसे थोड़ा अच्छा बना दें।

उदाहरण:

print(f'{numvar:.9f}')

नए f स्ट्रिंग के बारे में अधिक पढ़ना:

यहाँ विभिन्न परीक्षण विधियों के निष्पादन समय का एक चित्र है (ऊपर दिए गए अंतिम लिंक से):

निष्पादन समय


52

का उपयोग कर round:

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'

8

यह प्रिंट नहीं है जो स्वरूपण करता है, यह स्ट्रिंग्स की एक संपत्ति है, इसलिए आप बस उपयोग कर सकते हैं

newstring = "%.9f" % numvar

या नई शैली स्वरूपण का उपयोग करें। valueString = "{: 9f}"। प्रारूप (संख्या)
जरीन

8

यदि रनटाइम तक परिशुद्धता ज्ञात नहीं है, तो यह अन्य स्वरूपण विकल्प उपयोगी है:

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'

3
यदि आप .format-method का उपयोग करना चाहते हैं , तो ध्यान दें कि ऐसा घोंसले के तर्कों द्वारा भी किया जा सकता है '{:.{n}f}'.format(numvar,n=n):।
निक्कू

2

9 अंकों के साथ सटीक सेट करने के लिए, प्राप्त करें:

print "%.9f" % numvar

2 अंकों के साथ सटीक रिटर्न:

print "%.2f" % numvar 

2 अंकों के साथ सटीक लौटें और परिवर्तित मूल्य को तैरें:

numvar = 4.2345
print float("%.2f" % numvar) 

-2

strसमारोह एक बग है। कृपया निम्नलिखित प्रयास कीजिए। आपको '0,196553' दिखाई देगा, लेकिन सही आउटपुट '0,196554' है। क्योंकि strफ़ंक्शन का डिफ़ॉल्ट मान ROUND_HALF_UP है।

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")

2
.बनाम क्या है ,? और यह पॉलिवागो के प्रश्न के लिए कैसे प्रासंगिक है?
पीटर मोर्टेंसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.