मैं हमेशा 2 दशमलव स्थानों को दिखाने के लिए एक दशमलव को कैसे प्रारूपित कर सकता हूं?


237

मैं प्रदर्शित करना चाहता हूं:

49 जैसा 49.00

तथा:

54.9 जैसा 54.90

दशमलव की लंबाई के बावजूद या चाहे कोई भी दशमलव स्थान हो, मैं Decimal2 दशमलव स्थानों के साथ प्रदर्शित करना चाहूंगा , और मैं इसे कुशल तरीके से करना चाहूंगा। उद्देश्य धन मूल्यों को प्रदर्शित करना है।

जैसे, 4898489.00


4
आपको यथासंभव लंबे समय तक रहने की आवश्यकता है? इसका क्या मतलब है? आप मेमोरी से बाहर निकलने तक अग्रणी शून्य जोड़ सकते हैं, लेकिन मुझे संदेह है कि आप क्या चाहते हैं ...
मार्क बायर्स

मुझे लगता है कि इसका मतलब यह हो सकता है कि ओपी दशमलव का उपयोग कर रहा है। डेसीमल और दशमलव संदर्भ की सटीकता से नाखुश है जो सटीक रूप से एन अंकों को सीमित करता है जैसा कि "सख्त अर्थ में परिशुद्धता के एन अंक" (उदाहरण के लिए '123.456' दशमलव ('1.2E +) बन जाता है) 2 ')) और न कि "अंश अंश में n अंक" (दशमलव (' 123.45 ') के लिए) ... इसके साथ मददगार बनने के प्रयास के लिए मेरा उत्तर देखें। ;-)
मिशैल मार्कज़ी 19

1
हां, वे धन मूल्यों के लिए हैं।
orokusaki

जवाबों:


105

मुझे लगता है कि आप संभवतः मॉड्यूल Decimal()से वस्तुओं का उपयोग कर रहे हैं decimal? (यदि आपको मनमाने ढंग से बड़ी संख्या के साथ दशमलव बिंदु से परे सटीकता के दो अंकों की आवश्यकता है, तो आपको निश्चित रूप से होना चाहिए, और यही आपके प्रश्न का शीर्षक बताता है ...)

यदि ऐसा है, तो डॉक्स के डेसीमल एफएक्यू सेक्शन में एक प्रश्न / उत्तर जोड़ी होती है, जो आपके लिए उपयोगी हो सकती है:

प्र। दो दशमलव स्थानों के साथ एक निश्चित-बिंदु अनुप्रयोग में, कुछ इनपुट में कई स्थान होते हैं और उन्हें गोल करने की आवश्यकता होती है। अन्य लोगों के पास अधिक अंक नहीं होने चाहिए और उन्हें मान्य किए जाने की आवश्यकता है। किन तरीकों का इस्तेमाल करना चाहिए?

A. निर्धारित स्थानों की एक निश्चित संख्या के लिए परिमाण () विधि गोल है। यदि Inexact जाल सेट है, तो यह सत्यापन के लिए भी उपयोगी है:

>>> TWOPLACES = Decimal(10) ** -2       # same as Decimal('0.01')
>>> # Round to two places
>>> Decimal('3.214').quantize(TWOPLACES)
Decimal('3.21')
>>> # Validate that a number does not exceed two places
>>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Decimal('3.21')
>>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Traceback (most recent call last):
   ...
Inexact: None

अगला प्रश्न पढ़ता है

प्र। एक बार मेरे पास दो स्थान इनपुट होने के बाद, मैं आवेदन के दौरान उस अपरिवर्तनीय को कैसे बनाए रख सकता हूं?

यदि आपको इसका उत्तर चाहिए (बहुत सी अन्य उपयोगी जानकारी के साथ), तो डॉक्स के पूर्वोक्त खंड को देखें । इसके अलावा, यदि आप Decimalदशमलव बिंदु से परे परिशुद्धता के दो अंकों के साथ अपना मतलब रखते हैं (मतलब उतना ही सटीक है जितना दशमलव बिंदु के बाईं ओर सभी अंकों को रखने के लिए और इसके दाईं ओर दो और अधिक नहीं है ...) फिर उन्हें तार के साथ बदलना strठीक काम करेगा:

str(Decimal('10'))
# -> '10'
str(Decimal('10.00'))
# -> '10.00'
str(Decimal('10.000'))
# -> '10.000'

2
ओह, जवाब में दक्षता का उल्लेख करना भूल गया ... लेकिन मुझे लगता है कि मैं वैसे भी कोई विशेषज्ञ नहीं हूं। मुझे कोई कारण नहीं दिखता है कि विशेष रूप से "भिन्नात्मक अंकों" की एक निश्चित संख्या को इधर-उधर रखना अक्षम्य होगा - यद्यपि संख्याओं पर किए गए किसी भी संचालन को आवश्यकताओं के अनुरूप लाने के लिए परिणाम पर एक गोल संचालन की आवश्यकता हो सकती है ... के लिए दक्षता की खातिर, यह संभवतः जितना संभव हो उतना बार किया जाना चाहिए - जैसे कि उपयोगकर्ता के लिए क्रमांकन / मुद्रण से पहले।
मिशाल मार्कज़ी

517

आपके मान का प्रतिनिधित्व कैसे किया जाना चाहिए, यह परिभाषित करने के लिए आपको नए प्रारूप के विनिर्देशों का उपयोग करना चाहिए:

>>> from math import pi  # pi ~ 3.141592653589793
>>> '{0:.2f}'.format(pi)
'3.14'

दस्तावेज़ीकरण कई बार थोड़ा सा अप्रिय हो सकता है, इसलिए मैं निम्नलिखित, आसान पठनीय संदर्भों की सलाह देता हूं:

पायथन 3.6 ने शाब्दिक स्ट्रिंग प्रक्षेप (जिसे एफ-स्ट्रिंग्स के रूप में भी जाना जाता है) को पेश किया ताकि अब आप उपरोक्त को और भी अधिक संक्षिप्त रूप में लिख सकें:

>>> f'{pi:.2f}'
'3.14'

4
@Droogans: Euh ... formata str, return a float: print type({0:.2f}".format(pi))रिटर्न नहीं है <type 'str'>
बायोकेक

उफ़। शब्द पर वर्ब ओवरलोडिंग return। कृपया मानसिक रूप से इसे बदल दें print
दरोगांस

20
यदि आप संख्यात्मक प्लेसहोल्डर का उपयोग नहीं करना चाहते हैं:"{:.2f}".format(pi)
उपयोगकर्ता

क्या करता 0:है? मुझे लगता है .अजगर स्ट्रिंग का हिस्सा है
information_interchange

135

स्ट्रिंग स्वरूपण संचालन अजगर प्रलेखन की धारा जवाब आप देख रहे हैं शामिल हैं। संक्षेप में:

"%0.2f" % (num,)

कुछ उदाहरण:

>>> "%0.2f" % 10
'10.00'
>>> "%0.2f" % 1000
'1000.00'
>>> "%0.2f" % 10.1
'10.10'
>>> "%0.2f" % 10.120
'10.12'
>>> "%0.2f" % 10.126
'10.13'

के 0बाद के लिए %कोई ज़रूरत नहीं है, और numमें लपेटने की कोई ज़रूरत नहीं है tuple
user238424

17
दरअसल, टुप्ल में संख्या को लपेटना स्ट्रिंग प्रारूपण के दौरान तर्कों पर एक बतख टाइपिंग त्रुटि को रोकने के लिए एक कोडिंग सम्मेलन है। फ्लोट रूपांतरण के साथ इस मामले में इसका कोई प्रभाव नहीं पड़ता है, लेकिन यह एक अप्रत्याशित प्रकार की त्रुटि को रोकता है जब स्ट्रिंग्स में परिवर्तित होता है। r = 1; "%s" % r; r = (1, 2); "%s" % rबनाम पर विचार करें r = 1; "%s" % (r,); r = (1,2 ); "%s" % (r,)। जैसे, अजगर में सबसे परिष्कृत कोडिंग शैली अब बिना शर्त टपल का उपयोग करती है (और पायथन 3 ने स्ट्रिंग फॉर्मेटिंग की पूरी विधि को त्रुटि प्रवण के रूप में दर्शाया है)।
ट्रैविस ब्रैडशॉ

इसके अलावा, गणित की पृष्ठभूमि वाले लड़के के रूप में, "नग्न" दशमलव संकेतन बदसूरत है। अग्रणी 0 कुछ भी चोट नहीं करता है और बेहतर दिखता है। :)
ट्रैविस ब्रैडशॉ

3
एस्थेटली कोई अलग नहीं है। सबसे महत्वपूर्ण बात, 0 वैसे भी डिफ़ॉल्ट मूल्य है। यदि यह सौंदर्यवादी रूप से मनभावन कोड के लिए बनाता है तो डिफ़ॉल्ट रूप से प्रदान करने में कोई बुराई नहीं है। यह दिलचस्प है कि कितने डेवलपर्स (नहीं?) का चयन करते हैं, शुद्धता और शैली के बीच अंतर करते हैं। : /
ट्रैविस ब्रैडशॉ

32

आप स्ट्रिंग स्वरूपण ऑपरेटर का उपयोग कर सकते हैं :

num = 49
x = "%.2f" % num  # x is now the string "49.00"

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


1
मुझे लगता है कि 'f' नाम के चर को कुछ लोग भ्रमित कर सकते हैं। नीचे ट्रैविस जैसे उदाहरण के लिए इसे कुछ और कहना बेहतर होगा।
अलेक लैंडग्राफ

28
>>> print "{:.2f}".format(1.123456)
1.12

आप बदल सकते हैं 2में 2fदशमलव अंक आप दिखाना चाहते हैं के किसी भी संख्या के लिए।

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

इससे Python3.6, इसका अनुवाद इस प्रकार होता है:

>>> print(f"{1.1234:.2f}")
1.12

19

चर स्वरूपण को संभालने के लिए .format एक अधिक पठनीय तरीका है:

'{:.{prec}f}'.format(26.034, prec=2)

18

अजगर 3 में, ऐसा करने का एक तरीका होगा

'{:.2f}'.format(number)

6

यदि आपके पास कई पैरामीटर हैं तो आप उपयोग कर सकते हैं

 print('some string {0:.2f} & {1:.2f}'.format(1.1234,2.345))
 >>> some string 1.12 & 2.35

3

यदि आप इसे मुद्रा के लिए उपयोग कर रहे हैं, और यह भी चाहते हैं कि मूल्य ,आपके द्वारा उपयोग किया जा सकता है

$ {:,.f2}.format(currency_value)

उदाहरण के लिए:

currency_value = 1234.50

$ {:,.f2}.format(currency_value) --> $ 1,234.50

यहाँ कुछ समय पहले मैंने कुछ कोड लिखे हैं:

print("> At the end of year " + year_string + " total paid is \t$ {:,.2f}".format(total_paid))

> At the end of year   1  total paid is         $ 43,806.36
> At the end of year   2  total paid is         $ 87,612.72
> At the end of year   3  total paid is         $ 131,419.08
> At the end of year   4  total paid is         $ 175,225.44
> At the end of year   5  total paid is         $ 219,031.80   <-- Note .80 and not .8
> At the end of year   6  total paid is         $ 262,838.16
> At the end of year   7  total paid is         $ 306,644.52
> At the end of year   8  total paid is         $ 350,450.88
> At the end of year   9  total paid is         $ 394,257.24
> At the end of year  10  total paid is         $ 438,063.60   <-- Note .60 and not .6
> At the end of year  11  total paid is         $ 481,869.96
> At the end of year  12  total paid is         $ 525,676.32
> At the end of year  13  total paid is         $ 569,482.68
> At the end of year  14  total paid is         $ 613,289.04
> At the end of year  15  total paid is         $ 657,095.40   <-- Note .40 and not .4  
> At the end of year  16  total paid is         $ 700,901.76
> At the end of year  17  total paid is         $ 744,708.12
> At the end of year  18  total paid is         $ 788,514.48
> At the end of year  19  total paid is         $ 832,320.84
> At the end of year  20  total paid is         $ 876,127.20   <-- Note .20 and not .2

0

सबसे आसान तरीका यह है कि आपको यह दिखाने के लिए कि:

कोड:

>>> points = 19.5 >>> total = 22 >>>'Correct answers: {:.2%}'.format(points/total) `

आउटपुट: सही उत्तर: 88.64%


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