दशमलव के बाद फिक्स्ड अंक एफ-स्ट्रिंग्स के साथ


319

क्या दशमलव बिंदु के बाद अंकों की संख्या को ठीक करने के लिए पायथन एफ-स्ट्रिंग्स के साथ एक आसान तरीका है? (विशेष रूप से f- स्ट्रिंग्स, अन्य स्ट्रिंग प्रारूपण विकल्प जैसे कि .format या%)

उदाहरण के लिए, मान लें कि मैं दशमलव स्थान के बाद 2 अंक प्रदर्शित करना चाहता हूं।

मैं उसको कैसे करू? चलिए बताते हैं

a = 10.1234

जवाबों:


475

अपनी प्रारूप अभिव्यक्ति के प्रकार को निर्दिष्ट करें:

>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'

33
पीईपी सहित मेरे द्वारा प्राप्त किए गए किसी भी एफ-स्ट्रिंग प्रारूपण उदाहरणों में से कोई भी नहीं दिखा, आप प्रकार विनिर्देशक का उपयोग कर सकते हैं। मुझे लगता है कि मुझे लगता है कि होना चाहिए था, लेकिन डॉक्स इसे बाहर बुला अच्छा होगा।
GafferMan2112

आप सही हैं, अधिकांश उदाहरणों में प्रारूप निर्दिष्ट नहीं है। PEP में, हेक्स उदाहरण करता है: f'input={value:#06x}'और डेटाटाइम उदाहरण करते हैं: {anniversary:%A, %B %d, %Y}और {date:%A}। मुझे लगता है कि मुख्य व्याख्या कोड इक्विवेलेंस सेक्शन में है।
रोबो

9
ओह यार, यह बहुत खूबसूरत और सरल है। इस उत्तर को खोजने में मुझे 45 सेकंड से अधिक का समय क्यों लगा? ऊपर का खेल, Google
मैट फ्लेचर

2
यह भी ध्यान दें कि यदि आप लिखते हैं तो f के बिना - f '{a: .2}' यह अंकों की कुल संख्या की गणना करेगा और उत्तर 10 होगा
ड्रेको जूल

86

जब floatसंख्या की बात आती है , तो आप प्रारूप विनिर्देशक का उपयोग कर सकते हैं :

f'{value:{width}.{precision}}'

कहाँ पे:

  • value कोई भी अभिव्यक्ति है जो किसी संख्या का मूल्यांकन करती है
  • widthप्रदर्शित करने के लिए कुल उपयोग किए जाने वाले वर्णों की संख्या निर्दिष्ट करता है, लेकिन यदि valueचौड़ाई से अधिक स्थान की आवश्यकता होती है तो अतिरिक्त स्थान का उपयोग किया जाता है।
  • precision दशमलव बिंदु के बाद उपयोग किए जाने वाले वर्णों की संख्या को इंगित करता है

आप जो याद कर रहे हैं वह आपके दशमलव मान के लिए निर्दिष्ट प्रकार है। इस लिंक में , आप फ़्लोटिंग पॉइंट और दशमलव के लिए उपलब्ध प्रस्तुति प्रकार पाते हैं।

यहाँ आपके पास कुछ उदाहरण हैं, f(फिक्स्ड पॉइंट) प्रस्तुति प्रकार का उपयोग करके :

# notice that it adds spaces to reach the number of characters specified by width
In [1]: f'{1 + 3 * 1.5:10.3f}'
Out[1]: '     5.500'

# notice that it uses more characters than the ones specified in width
In [2]: f'{3000 + 3 ** (1 / 2):2.1f}' 
Out[2]: '3001.7'

In [3]: f'{1.2345 + 4 ** (1 / 2):9.6f}'
Out[3]: ' 3.234500'

# omitting width but providing precision will use the required characters to display the number with the the specified decimal places
In [4]: f'{1.2345 + 3 * 2:.3f}' 
Out[4]: '7.234'

# not specifying the format will display the number with as many digits as Python calculates
In [5]: f'{1.2345 + 3 * 0.5}'
Out[5]: '2.7344999999999997'

34

रोबो के जवाब में जोड़ना: यदि आप बड़ी संख्या में प्रिंट करना चाहते हैं, तो हजार विभाजकों का उपयोग करना एक बड़ी मदद हो सकती है (अल्पविराम पर ध्यान दें)।

>>> f'{a*1000:,.2f}'
'10,123.40'

15

F स्ट्रिंग्स ( अधिक यहां ) के साथ प्रारूप विनिर्देशक का उपयोग करें ।

  • आप दशमलव की संख्या को नियंत्रित कर सकते हैं :
pi = 3.141592653589793238462643383279

print(f'The first 6 decimals of pi are {pi:.6f}.')
The first 6 decimals of pi are 3.141593.
  • आप प्रतिशत में परिवर्तित कर सकते हैं :
grade = 29/45

print(f'My grade rounded to 3 decimals is {grade:.3%}.')
My grade rounded to 3 decimals is 64.444%.
  • आप अन्य चीजें भी कर सकते हैं जैसे प्रिंट निरंतर लंबाई :
from random import randint
for i in range(5):
    print(f'My money is {randint(0, 150):>3}$')
My money is 126$
My money is   7$
My money is 136$
My money is  15$
My money is  88$
  • या यहां तक ​​कि एक अल्पविराम हजार विभाजक के साथ प्रिंट करें :
print(f'I am worth {10000000000:,}$')
I am worth 10,000,000,000$

1
a = 10.1234

print(f"{a:0.2f}")

0.2f में:

  • 0 अजगर को बता रहा है कि प्रदर्शित करने के लिए अंकों की कुल संख्या पर कोई सीमा नहीं है
  • .2 कह रहा है कि हम दशमलव के बाद केवल 2 अंक लेना चाहते हैं (परिणाम एक राउंड () फ़ंक्शन के समान होगा)
  • f बता रहा है कि यह एक फ्लोट नंबर है। यदि आप f को भूल जाते हैं तो यह दशमलव के बाद सिर्फ 1 कम अंक प्रिंट करेगा। इस मामले में, यह दशमलव के बाद केवल 1 अंक होगा।

नंबर के लिए f- स्ट्रिंग पर एक विस्तृत वीडियो https://youtu.be/RtKUsUTY6to?t=606


-2

गोलाई के लिए ...

import datetime as dt
now = dt.datetime(2000, 1, 30, 15, 10, 15, 900)
now_mil = round(now.microsecond/1000)
print(f"{now:%Y/%m/%d %H:%M:%S.}{now_mil:03}")

आउटपुट: 2000/01/30 15: 10: 15.001


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