আমার কোডটি এখানে:
x = 1.0
y = 100000.0
print x/y
আমার ভাগফল হিসাবে প্রদর্শিত হয় 1.00000e-05
।
বৈজ্ঞানিক স্বরলিপি দমন করার এবং এটিকে প্রদর্শন করার মতো কোনও উপায় আছে কি
0.00001
? আমি ফলাফলটি স্ট্রিং হিসাবে ব্যবহার করতে যাচ্ছি।
আমার কোডটি এখানে:
x = 1.0
y = 100000.0
print x/y
আমার ভাগফল হিসাবে প্রদর্শিত হয় 1.00000e-05
।
বৈজ্ঞানিক স্বরলিপি দমন করার এবং এটিকে প্রদর্শন করার মতো কোনও উপায় আছে কি
0.00001
? আমি ফলাফলটি স্ট্রিং হিসাবে ব্যবহার করতে যাচ্ছি।
উত্তর:
'%f' % (x/y)
তবে আপনার নিজের যথার্থতা পরিচালনা করতে হবে। যেমন,
'%f' % (1/10**8)
কেবল শূন্য প্রদর্শন করবে।
বিশদটি ডক্সে রয়েছে
অথবা পাইথন 3 এর জন্য সমান পুরানো ফর্ম্যাটিং বা আরও নতুন স্টাইল বিন্যাস
নতুন সংস্করণ ব্যবহার করে ''.format
( .
আপনি প্রদর্শন করতে ইচ্ছুক হওয়ার পরে কতগুলি সংখ্যা নির্দিষ্ট করতে হবে তা ভাসমান সংখ্যাটি কতটা ছোট তার উপর নির্ভর করে)। এই উদাহরণটি দেখুন:
>>> a = -7.1855143557448603e-17
>>> '{:f}'.format(a)
'-0.000000'
উপরে প্রদর্শিত হিসাবে, ডিফল্ট 6 সংখ্যা! এটি আমাদের ক্ষেত্রে উদাহরণের জন্য সহায়ক নয়, পরিবর্তে আমরা এর মতো কিছু ব্যবহার করতে পারি:
>>> '{:.20f}'.format(a)
'-0.00000000000000007186'
পাইথন ৩.6 থেকে শুরু করে, এটি নতুন ফর্ম্যাট স্ট্রিং আক্ষরিক সাহায্যে সহজ করা যেতে পারে :
>>> f'{a:.20f}'
'-0.00000000000000007186'
f"{a:.{precision}f}"
পাইথনের নতুন সংস্করণগুলি (২.6 এবং তার পরে) এর সাথে, আপনি ''.format()
@ সিলেন্টগোস্টের পরামর্শ অনুসারে কাজটি করতে পারেন :
'{0:f}'.format(x/y)
>>> print('{:f}'.format(0.000000123))
0.000000
'{0:.10f}'
আরেকটি বিকল্প, আপনি যদি পান্ডা ব্যবহার করছেন এবং সমস্ত ভাসমানের জন্য বৈজ্ঞানিক স্বরলিপি দমন করতে চান তবে হ'ল পান্ডাস বিকল্পগুলি সমন্বয় করা।
import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
উপরের বেশিরভাগ উত্তরের জন্য আপনাকে নির্ভুলতা নির্দিষ্ট করতে হবে। তবে আপনি যদি অকারণে শূন্য ছাড়াই এভাবে ভাসমান প্রদর্শন করতে চান তবে:
1
0.1
0.01
0.001
0.0001
0.00001
0.000001
0.000000000001
numpy
একটি উত্তর আছে: np.format_float_positional
import numpy as np
def format_float(num):
return np.format_float_positional(num, trim='-')
এটি যে কোনও ঘেরের জন্য কাজ করবে:
def getExpandedScientificNotation(flt):
str_vals = str(flt).split('e')
coef = float(str_vals[0])
exp = int(str_vals[1])
return_val = ''
if int(exp) > 0:
return_val += str(coef).replace('.', '')
return_val += ''.join(['0' for _ in range(0, abs(exp - len(str(coef).split('.')[1])))])
elif int(exp) < 0:
return_val += '0.'
return_val += ''.join(['0' for _ in range(0, abs(exp) - 1)])
return_val += str(coef).replace('.', '')
return return_val
এটি ক্যাপ্টেন শসাবার উত্তরটি ব্যবহার করছে তবে 2 টি সংযোজন রয়েছে।
1) ফাংশনটি অ বৈজ্ঞানিক স্বরলিপি নম্বর পেতে দেয় এবং কেবল সেগুলি হিসাবে তাদের ফিরিয়ে দেয় (যাতে আপনি প্রচুর ইনপুট ফেলতে পারেন যে কয়েকটি সংখ্যা 0.00003123 বনাম 3.123e-05 এবং এখনও ফাংশনটির কাজ রয়েছে।
2) নেতিবাচক সংখ্যার জন্য সমর্থন যুক্ত। (মূল ফাংশনে, একটি নেতিবাচক সংখ্যা -1.08904e-05 থেকে 0.0000-108904 এর মতো শেষ হবে)
def getExpandedScientificNotation(flt):
was_neg = False
if not ("e" in flt):
return flt
if flt.startswith('-'):
flt = flt[1:]
was_neg = True
str_vals = str(flt).split('e')
coef = float(str_vals[0])
exp = int(str_vals[1])
return_val = ''
if int(exp) > 0:
return_val += str(coef).replace('.', '')
return_val += ''.join(['0' for _ in range(0, abs(exp - len(str(coef).split('.')[1])))])
elif int(exp) < 0:
return_val += '0.'
return_val += ''.join(['0' for _ in range(0, abs(exp) - 1)])
return_val += str(coef).replace('.', '')
if was_neg:
return_val='-'+return_val
return return_val
এসজির উত্তর ছাড়াও, আপনি দশমিক মডিউলটিও ব্যবহার করতে পারেন:
from decimal import Decimal
x = str(Decimal(1) / Decimal(10000))
# x is a string '0.0001'
যেহেতু গুগলে এটি শীর্ষ ফলাফল, আমি আমার সমস্যার সমাধান পেতে ব্যর্থ হয়ে এখানে পোস্ট করব। যদি আপনি কোনও ফ্লোট অবজেক্টের ডিসপ্লের মানটি ফর্ম্যাট করতে চান এবং এটি একটি ফ্ল্যাট থেকে থাকে - স্ট্রিং নয়, আপনি এই সমাধানটি ব্যবহার করতে পারেন:
একটি নতুন শ্রেণি তৈরি করুন যা ভাসমান মানগুলি প্রদর্শিত হয় সেভাবে পরিবর্তন করে।
from builtins import float
class FormattedFloat(float):
def __str__(self):
return "{:.10f}".format(self).rstrip('0')
আপনি পূর্ণসংখ্যার মানগুলিতে পরিবর্তন করে যথাযথ পরিবর্তন করতে পারেন {:f}
৩..4.৪ ব্যবহার করে আমারও একই সমস্যা ছিল যে এলোমেলোভাবে, আউটপুট ফাইলের একটি নম্বর এটি ব্যবহার করার সময় বৈজ্ঞানিক স্বরলিপি দিয়ে ফর্ম্যাট করা হবে:
fout.write('someFloats: {0:0.8},{1:0.8},{2:0.8}'.format(someFloat[0], someFloat[1], someFloat[2]))
এটি ঠিক করতে আমাকে যা করতে হয়েছিল তা হ'ল 'চ' যুক্ত করা:
fout.write('someFloats: {0:0.8f},{1:0.8f},{2:0.8f}'.format(someFloat[0], someFloat[1], someFloat[2]))
৩.6 হিসাবে (সম্ভবত কিছুটা পুরানো ৩.x এর সাথেও কাজ করে), এটি আমার সমাধান:
import locale
locale.setlocale(locale.LC_ALL, '')
def number_format(n, dec_precision=4):
precision = len(str(round(n))) + dec_precision
return format(float(n), f'.{precision}n')
precision
গণনার উদ্দেশ্য হ'ল বৈজ্ঞানিক স্বরলিপি থেকে দূরে রাখতে আমাদের পর্যাপ্ত নির্ভুলতা রয়েছে তা নিশ্চিত করা (ডিফল্ট নির্ভুলতা এখনও 6))
dec_precision
যুক্তি দশমিক বিন্দুর জন্য ব্যবহার করতে অতিরিক্ত স্পষ্টতা যোগ করা হয়েছে। যেহেতু এটি n
ফর্ম্যাটটি ব্যবহার করে, তাই কোনও তুচ্ছ শূন্য যুক্ত করা হবে না ( f
ফর্ম্যাটগুলির বিপরীতে )। n
দশমিক ছাড়াই ইতিমধ্যে রাউন্ড পূর্ণসংখ্যার রেন্ডারিংয়ের যত্ন নেবে।
n
float
ইনপুট প্রয়োজন , সুতরাং theালাই।