ভাসমান পয়েন্ট সংখ্যাটি একটি নির্দিষ্ট নির্ভুলিতে রূপান্তর করুন এবং তারপরে স্ট্রিংয়ে অনুলিপি করুন


144

আমার একটি ভাসমান পয়েন্ট নম্বর আছে, বলুন 135.12345678910। আমি মানটি স্ট্রিংয়ের সাথে যুক্ত করতে চাই, তবে কেবল চাই 135.123456789। মুদ্রণ সহ, আমি সহজেই এমন কিছু করে এটি করতে পারি:

print "%.9f" % numvar

সঙ্গে numvarআমার মূল সংখ্যা হচ্ছে। এটি করার কোনও সহজ উপায় আছে?


3
% হুবহু এটি করে -% মুদ্রণ ফাংশনের অংশ নয় তবে স্ট্রিংয়ের - পাইথন ডক্সটি দেখুন
মাইকেল-এস

উত্তর:


177

পাইথন <3 এর সাথে (যেমন ২. 2. [মন্তব্য দেখুন] বা ২.7), এটি করার দুটি উপায় রয়েছে are

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

তবে মনে রাখবেন যে পাইথন সংস্করণগুলির জন্য 3 টি উপরে (উদাহরণস্বরূপ 3.2 বা 3.3), বিকল্প দুটি পছন্দ করা হয়েছে

বিকল্প দুটি বিষয়ে আরও তথ্যের জন্য, আমি আপনাকে পরামর্শ দিচ্ছি স্ট্রিং পাইথন নথিপত্র থেকে ফর্ম্যাটিং এই লিঙ্কটি

এবং বিকল্প বিকল্পটির আরও তথ্যের জন্য, এই লিঙ্কটি যথেষ্ট হবে এবং বিভিন্ন পতাকার তথ্য রয়েছে

পাইথন ৩.6 (আনুষ্ঠানিকভাবে ২০১ 2016 সালের ডিসেম্বরে প্রকাশিত হয়েছে), fস্ট্রিংকে আক্ষরিক যোগ করেছে , এখানে আরও তথ্য দেখুন , যা str.formatপদ্ধতিটি প্রসারিত করে (কোঁকড়ানো ধনুর্বন্ধনী ব্যবহার যেমন f"{numvar:.9f}"মূল সমস্যাটি সমাধান করে), অর্থাৎ,

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

সমস্যা সমাধান করে আরও তথ্যের জন্য @ অর-ডুয়ানের উত্তরটি দেখুন, তবে এই পদ্ধতিটি দ্রুত


1
বিকল্প দুটি হওয়া উচিত newer_method_string = "{:.9f}".format(numvar)- :ক্ষেত্র এবং বিন্যাস পৃথক করতে প্রয়োজনীয় নোট করুন। আমি যাইহোক 2.7.5 এ এটি পরীক্ষা করেছি।
কলটার

1
পাইথন ২.6 বিকল্পের জন্য দুটি হওয়া উচিত newer_method_string = "{0:.9f}".format(numvar)- এই পুরানো সংস্করণটির ক্ষেত্রের নামের জন্য প্রয়োজনীয় 0 টি নোট করুন।
ttq

56

পাইথন ৩.6

এটি পরিষ্কার করার জন্য, আপনি এফ-স্ট্রিং ফর্ম্যাটিং ব্যবহার করতে পারেন । formatপদ্ধতির মতো এটির প্রায় একই সিনট্যাক্স রয়েছে তবে এটিকে কিছুটা সুন্দর করুন।

উদাহরণ:

print(f'{numvar:.9f}')

নতুন এফ স্ট্রিং সম্পর্কে আরও পড়া:

বিভিন্ন পরীক্ষিত পদ্ধতির (উপরের লিঙ্কটি থেকে) সম্পাদনের সময়গুলির চিত্র এখানে রয়েছে:

ফাঁসির সময়


52

ব্যবহার round:

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'

8

এটি মুদ্রণ নয় যা ফর্ম্যাট করে, এটি স্ট্রিংয়ের সম্পত্তি, যাতে আপনি কেবল ব্যবহার করতে পারেন

newstring = "%.9f" % numvar

অথবা নতুন স্টাইল বিন্যাস ব্যবহার করুন। মান স্ট্রিং = "{:. 9f}"। ফর্ম্যাট (সংখ্যা)
জেরেন

8

যথাযথতা রানটাইম না হওয়া পর্যন্ত জানা না গেলে, এই অন্যান্য বিন্যাস বিকল্পটি দরকারী:

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'

3
আপনি ব্যবহার করতে চান, তাহলে .format-method, নোট যে এটি পাখির যুক্তির দ্বারা করা সম্ভব যেমন: '{:.{n}f}'.format(numvar,n=n)
nivk

2

9 টি সংখ্যার সাথে নির্ভুলতা নির্ধারণ করতে, পান:

print "%.9f" % numvar

2 অঙ্ক সহ নির্ভুলতা ফেরান:

print "%.2f" % numvar 

2 অঙ্ক এবং ভাসমান রূপান্তরিত মান সহ নির্ভুলতা ফেরান:

numvar = 4.2345
print float("%.2f" % numvar) 

-2

strফাংশন একটি বাগ আছে। নিম্নলিখিত চেষ্টা করুন। আপনি '0,196553' দেখতে পাবেন তবে সঠিক আউটপুটটি '0,196554'। কারণ strফাংশনের ডিফল্ট মান হ'ল ROUND_HALF_UP।

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")

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