সর্বদা 2 দশমিক স্থান দেখানোর জন্য আমি কীভাবে একটি দশমিক বিন্যাস করতে পারি?


237

আমি প্রদর্শন করতে চাই:

49 যেমন 49.00

এবং:

54.9 যেমন 54.90

দশমিক দৈর্ঘ্য নির্বিশেষে বা যে কোনও দশমিক স্থান রয়েছে তা নির্বিশেষে আমি Decimal2 দশমিক স্থান সহ একটি প্রদর্শন করতে চাই এবং আমি এটি একটি দক্ষ পদ্ধতিতে করতে চাই। উদ্দেশ্য অর্থের মান প্রদর্শন করা।

যেমন, 4898489.00


4
আপনার এটি যতটা সম্ভব দীর্ঘ হওয়া দরকার? ওটার মানে কি? আপনার স্মৃতিশক্তি শেষ না হওয়া পর্যন্ত আপনি নেতৃস্থানীয় জিরো যুক্ত করতে পারেন তবে আমার সন্দেহ হয় যা আপনি চান তা নয় ...
মার্ক বাইয়ার্স

আমি মনে করি এটির অর্থ এই হতে পারে যে ওপি দশমিক ব্যবহার করছে ec দশমিক and 2 ')) এবং "ভগ্নাংশের অংশে এন সংখ্যাগুলি নয়" (দশমিকের জন্য (' 123.45 ')) ... এটির সাহায্যকারী হওয়ার চেষ্টা করার জন্য আমার উত্তর দেখুন। ;-)
মাইচা মার্কসিক

1
হ্যাঁ, এগুলি অর্থের জন্য।
orokusaki

উত্তর:


105

আমি মনে করি আপনি সম্ভবত মডিউলটি Decimal()থেকে অবজেক্টগুলি ব্যবহার করছেন decimal? (আপনি যদি নির্বিচারে বড় সংখ্যার সাথে দশমিক পয়েন্টের বাইরে যথাযথতার দুটি অঙ্কের প্রয়োজন হয় তবে আপনার অবশ্যই হওয়া উচিত এবং এটিই আপনার প্রশ্নের শিরোনাম থেকেই বোঝায় ...)

যদি তা হয় তবে ডক্সের দশমিক FAQ বিভাগে একটি প্রশ্ন / উত্তর জোড়া রয়েছে যা আপনার পক্ষে কার্যকর হতে পারে:

প্র: দুটি দশমিক স্থান সহ স্থির-পয়েন্ট অ্যাপ্লিকেশনটিতে কিছু ইনপুটগুলির অনেকগুলি স্থান রয়েছে এবং এটি বৃত্তাকার করা প্রয়োজন। অন্যের অতিরিক্ত সংখ্যা হওয়ার কথা না এবং তাদের বৈধতা দেওয়ার দরকার হয়। কোন পদ্ধতি ব্যবহার করা উচিত?

উ: কোয়ানটিজ () পদ্ধতিটি দশমিক স্থানে একটি নির্দিষ্ট সংখ্যার রাউন্ডে আসে। যদি নিখুঁত ফাঁদ সেট করা থাকে তবে এটি বৈধতার জন্যও কার্যকর is

>>> 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
ওহ, উত্তরে দক্ষতার কথা বলতে ভুলে গিয়েছি ... তবে আমি অনুমান করি যে আমি যাইহোক বিশেষজ্ঞ নই। আমি নির্দিষ্ট সংখ্যক "ভগ্নাংশের সংখ্যা" রাখার জন্য এটি বিশেষভাবে অক্ষম হওয়ার কোনও কারণ আমি দেখতে পাচ্ছি না - যদিও সংখ্যার উপর সঞ্চালিত যে কোনও ক্রিয়াকলাপ অবশ্যই প্রয়োজনীয়তার সাথে সামঞ্জস্য করার জন্য ফলাফলটিতে একটি বৃত্তাকার অপারেশনের প্রয়োজন হতে পারে ... জন্য দক্ষতার জন্য, এটি সম্ভবত যথাসম্ভব কম সময়ে করা উচিত - যেমন ব্যবহারকারীর জন্য সিরিয়ালকরণ / প্রিন্টিংয়ের ঠিক আগে prior
মিচা মার্ক্সিক

516

আপনার মানটি কীভাবে উপস্থাপন করা উচিত তা নির্ধারণ করতে আপনার নতুন ফর্ম্যাট স্পেসিফিকেশনগুলি ব্যবহার করা উচিত:

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

ডকুমেন্টেশনগুলি কিছু সময় কিছুটা অবসন্ন হতে পারে, তাই আমি নিম্নলিখিত, আরও সহজ পাঠযোগ্য রেফারেন্সগুলি সুপারিশ করি:

পাইথন ৩.6 আক্ষরিক স্ট্রিং ইন্টারপোলেশন প্রবর্তন করেছে (এফ-স্ট্রিং নামেও পরিচিত) সুতরাং এখন আপনি উপরেরটি আরও বেশি সংক্ষেপে লিখতে পারেন:

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

4
@Droogans: Euh ... formatএকটি ফিরতি নেই str, না একটি float: print type({0:.2f}".format(pi))আয় <type 'str'>
BioGeek

উফ। শব্দের উপর ক্রিয়া অতিরিক্ত লোড হচ্ছে return। মানসিকভাবে এটি পরিবর্তন করুন print
Droogans

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
ব্যবহারকারী 238424

17
প্রকৃতপক্ষে, স্টুপ ফর্ম্যাটিংয়ের সময় আর্গুমেন্টগুলিতে হাঁসের টাইপিংয়ের ত্রুটি রোধ করার জন্য একটি টিপলে নাম্বার মোড়ানো একটি কোডিং কনভেনশন। এটি ফ্লোট রূপান্তর দিয়ে এই ক্ষেত্রে কোনও প্রভাব ফেলবে না, তবে স্ট্রিংগুলিতে রূপান্তর করার সময় এটি একটি অপ্রত্যাশিত ধরণের ত্রুটি প্রতিরোধ করে। r = 1; "%s" % r; r = (1, 2); "%s" % rবনাম বিবেচনা করুন r = 1; "%s" % (r,); r = (1,2 ); "%s" % (r,)। এই হিসাবে, পাইথনের বেশিরভাগ পরিশীলিত কোডিং শৈলীগুলি এখন নিঃশর্ত টুপল ব্যবহার করে (এবং পাইথন 3 স্ট্রিং বিন্যাসের পুরো পদ্ধতিটিকে ত্রুটির প্রবণ হিসাবে অবহেলা করে)।
ট্র্যাভিস ব্র্যাডশো 4'10

এছাড়াও, একটি গণিতের পটভূমির লোক হিসাবে, "নগ্ন" দশমিক স্বীকৃতি কুরুচিপূর্ণ। শীর্ষস্থানীয় 0 কোনওরকম ক্ষতি করে না এবং আরও ভাল দেখায়। :)
ট্র্যাভিস ব্র্যাডশো 4'10

3
নান্দনিকভাবে আলাদা নয়। সর্বাধিক গুরুত্বপূর্ণ, 0 হ'ল ডিফল্ট মান, যাইহোক। যদি এটি নান্দনিকভাবে আনন্দদায়ক কোডটি করে তবে ডিফল্ট সরবরাহ করার কোনও ক্ষতি নেই harm এটি আকর্ষণীয় যে কতগুলি বিকাশকারী সঠিকতা এবং শৈলীর মধ্যে পার্থক্য করতে (করতে পারবেন না)? : /
ট্র্যাভিস ব্র্যাডশো

32

আপনি স্ট্রিং ফর্ম্যাটিং অপারেটরটিকে তাই ব্যবহার করতে পারেন :

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

আপনি "দক্ষ" বলতে কী বোঝায় তা আমি নিশ্চিত নই - এটি অবশ্যই আপনার আবেদনের বাধা নয় । আপনার প্রোগ্রামটি যদি ধীরে ধীরে চলতে থাকে তবে প্রথমে গরম দাগগুলি খুঁজতে এটি প্রোফাইল করুন এবং তারপরে সেগুলি অনুকূলিত করুন।


1
আমি ভেরিয়েবল 'চ' নামকরণ কিছু লোককে বিভ্রান্ত করতে পারে বলে মনে করি। নীচে ট্র্যাভিসের মতো উদাহরণের জন্য একে অন্য কিছু বলা ভাল।
আলেক ল্যান্ডগ্রাফ

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

আপনি পরিবর্তন করতে পারেন 2মধ্যে 2fদশমিক পয়েন্ট দেখাতে চান যে কোন সংখ্যার জন্য।

সম্পাদনা করুন:

থেকে Python3.6, এটি অনুবাদ করে:

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



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%


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.