अजगर में प्रतिशत मूल्य कैसे प्रिंट करें?


182

यह मेरा कोड है:

print str(float(1/3))+'%'

और यह दिखाता है:

0.0%

लेकिन मैं पाना चाहता हूं 33%

मैं क्या कर सकता हूँ?


11
int / int = int, int / float = float, flaot / int = float
AbiusX

3
प्रतिशत का अर्थ है प्रति सौ । यदि आपके पास एक सरल अनुपात ( 1/3आपके मामले में) है, तो आपके पास प्रति यूनिट मूल्य है जिसे प्रतिशत मान 100प्राप्त करने के लिए इसे गुणा करना होगा । पूर्णांक और फ्लोट डिवीजन के बीच अंतर के लिए अन्य उत्तर देखें।
अपाला

FWIW, Python 3.x print(str(float(1/3))+'%')में प्रिंट होगा 0.3333333333333333%- फिर भी ठीक वैसा नहीं जैसा आप चाहते हैं, लेकिन कम से कम यह थोड़ा करीब है। ऐसा इसलिए है क्योंकि विभाजन उस संस्करण में अलग तरह से काम करता है।
मार्टिन

जवाबों:


278

formatएक प्रतिशत फ़्लोटिंग पॉइंट सटीक प्रकार का समर्थन करता है :

>>> print "{0:.0%}".format(1./3)
33%

यदि आप पूर्णांक विभाजन नहीं चाहते हैं, तो आप Python3 के विभाजन को __future__निम्न से आयात कर सकते हैं :

>>> from __future__ import division
>>> 1 / 3
0.3333333333333333

# The above 33% example would could now be written without the explicit
# float conversion:
>>> print "{0:.0f}%".format(1/3 * 100)
33%

# Or even shorter using the format mini language:
>>> print "{:.0%}".format(1/3)
33%

4
क्या float(1)वास्तव में अधिक से अधिक pythonic है 1.?
टोबियास किन्ज़लर

@TobiasKienzler, मुझे नहीं पता, अगर यह अधिक पायथोनिक है। कम से कम यह कुछ ऐसा है जिसे आप कोड पढ़ते समय ठोकर खाते हैं। मुझे लगता है कि पायथन 3 और वास्तविक विभाजन के साथ डिफ़ॉल्ट रूप से यह जलन दूर हो गई है।
मिकू

वास्तव में। मुझे आश्चर्य है कि गुइडो ने शुरू से ही असली विभाजन को क्यों लागू नहीं किया ... गोल 1/3 से 0 तक सभी के बाद स्पष्ट होना चाहिए ...
टोबियास किन्ज़्लर

1
@TobiasKienzler शायद, क्योंकि पहले के समय में, पायथन आजकल के मुकाबले C के करीब था।
ग्लोगल

14
पायथन 2 में, मैं 1.0इसके बजाय float(1)या का उपयोग करेगा 1.। IMHO यह पूर्व की तुलना में कम अप्रिय है और बाद के रूप में सूक्ष्म नहीं है।
MestreLion

175

.format()प्रारूप विधि के लिए एक और अधिक सुविधाजनक 'प्रतिशत'-स्वरूपण विकल्प है :

>>> '{:.1%}'.format(1/3.0)
'33.3%'

4
क्या पुराने स्कूल के "%.1f"प्रारूपण के साथ ऐसा करने का कोई तरीका है ?
युजी 'तोमिता' टोमिता

1
थोड़ा सा "कम सुविधाजनक", लेकिन, हाँ! जैसा कि ऊपर सुझाया गया हैprint("%.1f%%" % (100 * 1.0/3))

12
यह सबसे अच्छा उत्तर है क्योंकि इसमें 100 से गुणा करने की आवश्यकता नहीं होती है। बल्कि यह इस तथ्य का लाभ उठाता है कि formatपहले से ही प्रतिशत को कैसे प्रिंट करना जानता है!
ब्लेमबर्ट

5
यह स्वीकृत उत्तर होना चाहिए। यह अर्थपूर्ण कार्यान्वयन विवरण को समाप्त करने के लिए अंतर्निहित क्षमताओं का उपयोग करके बहुत अधिक पायथन है, जो कि 100 से गुणा होगा।
ksadowski

2
तो एफ-स्ट्रिंग शैली में यह होगाf"{1/3.0:.1%}"
कुबास

66

पूर्णता के लिए, क्योंकि मैंने देखा कि किसी ने भी इस सरल दृष्टिकोण का सुझाव नहीं दिया:

>>> print("%.0f%%" % (100 * 1.0/3))
33%

विवरण:

  • %.0f" 0 दशमलव स्थानों के साथ एक फ्लोट प्रिंट " के लिए खड़ा है , इसलिए %.2fप्रिंट होगा33.33
  • %%एक शाब्दिक निशान %। अपने मूल से थोड़ा क्लीनर+'%'
  • 1.0इसके बजाय 1फ्लोट करने के लिए विभाजन का ध्यान रखना, इसलिए अब और नहीं0.0

1
नोट: १००.० * १/३ -> ठीक है, १००.० * (१/३) -> ०.० नहीं ठीक है

@martialdidit: मुझे इसकी जानकारी है, इसीलिए मेरे जवाब में कोष्ठक नहीं है 1/3। मूल्यांकन आदेश जानबूझकर है:100.0 * 1 / 3 => 100.0 / 3 => 0.33...
MestreLion

किसी भी मामले में, मैंने चीजों को स्पष्ट 100करने के लिए 1, से जबरदस्ती स्थानांतरित कर दिया है ।
MestreLion

2
अपना क्षमा, @ रगरगोत्र? यह है व्यापक अर्थों में स्वरूपण, कि यह बदल देती है एक स्ट्रिंग के रूप प्रदर्शित करने के लिए एक इनपुट। कृपया ध्यान दें कि ओपी को कभी भी उपयोग की आवश्यकता नहीं होती है .format(), और %-फॉर्मिंग, जिसे पायथन में स्ट्रिंग प्रक्षेप के रूप में भी जाना जाता है , एक पूरी तरह से वैध विकल्प है।
MestreLion

% के साथ आप एक स्ट्रिंग को एक फ्लोट स्वरूपित कर रहे हैं। प्रतिशत-स्ट्रिंग के लिए फ्लोट नहीं। गुणन 100 से हाथ से किया जाता है,% से नहीं। मुझे लगता है कि एकमात्र सही समाधान जो केवल स्वरूपण का उपयोग करता है {: .0%} के साथ है
रग्गरो तुर्रा

38

आप पूर्णांकों को विभाजित कर रहे हैं और फिर फ्लोट में परिवर्तित कर रहे हैं। इसके बजाय फ़्लोट द्वारा विभाजित करें।

एक बोनस के रूप में, यहाँ वर्णित भयानक स्ट्रिंग प्रारूपण विधियों का उपयोग करें: http://docs.python.org/library/string.html#format-specification-mini-language

एक प्रतिशत रूपांतरण और सटीक निर्दिष्ट करने के लिए।

>>> float(1) / float(3)
[Out] 0.33333333333333331

>>> 1.0/3.0
[Out] 0.33333333333333331

>>> '{0:.0%}'.format(1.0/3.0) # use string formatting to specify precision
[Out] '33%'

>>> '{percent:.2%}'.format(percent=1.0/3.0)
[Out] '33.33%'

एक महान मणि!


18

बस पायथन 3 एफ-स्ट्रिंग समाधान जोड़ने के लिए

prob = 1.0/3.0
print(f"{prob:.0%}")

4

तो आप इसके बजाय यह करना चाहते हैं:

print str(int(1.0/3.0*100))+'%'

.0तैरता और के रूप में उन्हें सूचित करता है int()बाद में फिर से उन्हें राउंड पूर्णांकों के लिए।


मुझे पता है कि यह 2011 से है लेकिन ... int()गोल नहीं है। उदा int(1.9) != 2। गोलाई इसलिए की तरह किया जा सकता है -round(1.9,0) == 2
मालिक

int()निश्चित रूप से संख्या को कम करता है । मेरा उदाहरण वास्तव में वही करता है जो मेरा मतलब था; क्योंकि ओपी चाहता था कि अंकों को काट दिया जाए।
मोर्टेन क्रिस्टेन्सन

स्टॉकओवरफ्लो महान है - साल की एक जोड़ी और अभी भी एक प्रतिक्रिया। धन्यवाद। हालाँकि, पूर्णता के लिए, मैं स्पष्ट करना चाहता हूं। int()अंक गिरता है। यह गोल नहीं होता है। गोलाई का अर्थ है कि यह अंकों के साथ कुछ करता है। अंतिम परिणाम हालांकि वही है; उस अर्थ में, मैं आपकी बात देख रहा हूं। इसके अलावा, ओपी यह स्पष्ट नहीं करता है कि वह अंकों के साथ क्या करना चाहता है, उसके पास 33.333 है ... 33 से गोल करता है। मेरी टिप्पणी का जवाब देने के लिए धन्यवाद और आपका दिन शुभ हो!
का मालिक है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.