পাইথনে শতাংশের মূল্য কীভাবে মুদ্রণ করবেন?


182

এটি আমার কোড:

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

এবং এটা দেখায়:

0.0%

তবে আমি পেতে চাই 33%

আমি কি করতে পারি?


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

3
পার্সেন্ট মানে প্রতি শত । আপনার যদি একটি সরল অনুপাত থাকে ( 1/3আপনার ক্ষেত্রে), আপনার প্রতি ইউনিট মান রয়েছে যা শতাংশ মান 100পেতে এটিকে গুণতে হবে । পূর্ণসংখ্যা এবং ভাসমান বিভাগের মধ্যে পার্থক্যের জন্য অন্যান্য উত্তরগুলি দেখুন।
অপালালা

পাইথন ৩.x এফডাব্লুআইডাব্লু print(str(float(1/3))+'%')প্রিন্ট করবে 0.3333333333333333%- আপনি যা চান ঠিক তা নয় তবে কমপক্ষে এটি কিছুটা কাছাকাছি। এটি কারণ সংস্করণে বিভাগটি আলাদাভাবে কাজ করে।
মার্টিনিউ

উত্তর:


278

formatশতাংশ শতাংশ ভাসমান পয়েন্ট যথার্থতা সমর্থন করে :

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

আপনি যদি পূর্ণসংখ্যা বিভাগ চান না, আপনি পাইথন 3 বিভাগটি আমদানি থেকে করতে পারেন __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
Is float(1)চেয়ে সত্যিই আরো pythonic 1.?
টোবিয়াস কেইনজলার

@ তোবিয়াস কিইনজেলার, আমি জানি না, এটি আরও অজগর কিনা। কোডটি পড়ার সময় কমপক্ষে এটি এমন কিছু যা আপনি হোঁচট খাচ্ছেন। আমি পাইথন 3 এবং ডিফল্টরূপে প্রকৃত বিভাগের সাথে এই জ্বালাটি কেটে গেছে বলে মনে করি।
মিকু

প্রকৃতপক্ষে. আমি আশ্চর্য হয়েছি কেন গুডো প্রথম থেকেই সত্যিকারের বিভাগ বাস্তবায়িত করেনি ... 1/3 থেকে 0 এর বৃত্তাকারটি সর্বোপরি স্পষ্ট হওয়া উচিত ...
গোলটি সর্বোপরি

1
@ তোবিয়াস কিইনজলার সম্ভবত কারণ পূর্ববর্তী সময়ে পাইথন আজকের চেয়ে সি এর কাছাকাছি ছিল।
glglgl

14
পাইথন 2 এ, আমি এর 1.0পরিবর্তে float(1)বা ব্যবহার করব 1.। আইএমএইচও এটি পূর্বের চেয়ে কম বিঘ্নযুক্ত এবং পরবর্তীকালের মতো সূক্ষ্ম নয়।
ম্যাস্ট্রিলিয়ন

175

.format()বিন্যাস পদ্ধতির জন্য আরও একটি সুবিধাজনক 'শতাংশ'-ফর্ম্যাটিং বিকল্প রয়েছে :

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

4
পুরানো স্কুল "%.1f"ফর্ম্যাটিংয়ের সাথে এটি করার কোনও উপায় আছে কি ?
ইউজি 'টোমিতা' টোমিতা

1
সামান্য "কম সুবিধাজনক", তবে, হ্যাঁ! উপরে প্রস্তাবিত মতprint("%.1f%%" % (100 * 1.0/3))

12
এটি সেরা উত্তর কারণ এটির জন্য এটির গুণক প্রয়োজন হয় না 100. বরং এটি formatশতাংশের মুদ্রণ কীভাবে ইতিমধ্যে জানে তা এই সুবিধাটির সুবিধা নেয় !
ব্লেমবার্ট

5
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি অনেক বেশি পাইথোনিক, অর্থহীন বাস্তবায়নের বিশদটি সরিয়ে দিতে অন্তর্নির্মিত ক্ষমতাগুলি ব্যবহার করে যেটি 100 দ্বারা গুণ করা হবে।
ksadowski

1
সুতরাং এফ স্ট্রিং শৈলীতে এটি হবেf"{1/3.0:.1%}"
কুবাস

66

কেবল সম্পূর্ণতার খাতিরে, যেহেতু আমি খেয়াল করেছি যে কেউই এই সহজ পদ্ধতির পরামর্শ দেয়নি:

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

বিবরণ:

  • %.0f" 0 দশমিক স্থান সহ একটি ফ্লোট মুদ্রণ করে " print , তাই %.2fমুদ্রণ হবে33.33
  • %% আক্ষরিক মুদ্রণ % । আপনার আসল তুলনায় কিছুটা পরিষ্কার+'%'
  • 1.0পরিবর্তে 1ভাসা বিভাগ বিভাজন যত্ন নেওয়া, তাই আর না0.0

1
দ্রষ্টব্য: 100.0 * 1/3 -> ঠিক আছে, 100.0 * (1/3) -> 0.0 ঠিক নেই
mpgn

@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()পরে আবার তাদের চক্রের পূর্ণসংখ্যার করতে।


আমি জানি এটি ২০১১ সালের কিন্তু ... int()গোলাকার হয় না। যেমন int(1.9) != 2। রাউন্ডিং এর মতোও করা যেতে পারে -round(1.9,0) == 2
মালিক

int()সংখ্যাটি অবশ্যই গোল করে দেয়। আমার উদাহরণটি ঠিক তাই করেছিল যা আমি এটি করতে চাইছিলাম; ওপি চেয়েছিল যেহেতু অঙ্কগুলি কেটে ফেলছে।
মর্টেন ক্রিস্টেনসেন

স্টকওভারফ্লো দুর্দান্ত - কয়েক বছর এবং এখনও একটি প্রতিক্রিয়া। ধন্যবাদ. তবে সম্পূর্ণতার স্বার্থে আমি স্পষ্ট করে বলতে চাই। int()অঙ্কগুলি ড্রপ করে। এটি গোলাকার হয় না। রাউন্ডিং বলতে বোঝায় যে এটি অঙ্কগুলির সাথে কিছু করে। শেষ ফলাফল যদিও একই; এই অর্থে, আমি আপনার বক্তব্য দেখতে এছাড়াও, ওপি স্পষ্ট করে না যে সে কী করতে চায় তার সাথে সংখ্যাগুলি 33.333 আছে ... 33 এর চারপাশে রয়েছে। আমার মন্তব্যে সাড়া দেওয়ার জন্য ধন্যবাদ এবং একটি দুর্দান্ত দিন!
মালিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.