मैं इसे कैसे प्रदर्शित कर सकता हूं:
दशमलव ('40800000000.00000000000000') '4.08E + 10' के रूप में?
मैंने यह कोशिश की है:
>>> '%E' % Decimal('40800000000.00000000000000')
'4.080000E+10'
लेकिन यह उन अतिरिक्त 0 है।
मैं इसे कैसे प्रदर्शित कर सकता हूं:
दशमलव ('40800000000.00000000000000') '4.08E + 10' के रूप में?
मैंने यह कोशिश की है:
>>> '%E' % Decimal('40800000000.00000000000000')
'4.080000E+10'
लेकिन यह उन अतिरिक्त 0 है।
जवाबों:
from decimal import Decimal
'%.2E' % Decimal('40800000000.00000000000000')
# returns '4.08E+10'
आपके '40800000000.00000000000000' में और भी कई महत्वपूर्ण शून्य हैं जिनका किसी अन्य अंक के समान अर्थ है। इसलिए आपको स्पष्ट रूप से बताना होगा कि आप कहां रुकना चाहते हैं।
यदि आप सभी ट्रेलिंग शून्य को स्वचालित रूप से निकालना चाहते हैं, तो आप कोशिश कर सकते हैं:
def format_e(n):
a = '%E' % n
return a.split('E')[0].rstrip('0').rstrip('.') + 'E' + a.split('E')[1]
format_e(Decimal('40800000000.00000000000000'))
# '4.08E+10'
format_e(Decimal('40000000000.00000000000000'))
# '4E+10'
format_e(Decimal('40812300000.00000000000000'))
# '4.08123E+10'
format % values
अभी भी सिंटैक्स का उपयोग पायथन 3 मानक पुस्तकालय के भीतर भी किया जा रहा है, मेरा मानना है कि यह तकनीकी रूप से पायथन 3 में पदावनत है, या कम से कम अनुशंसित प्रारूपण विधि नहीं है, और वर्तमान अनुशंसित सिंटैक्स, पायथन 2.6 के साथ शुरू होगा, '{0:.2E}'.format(Decimal('40800000000.00000000000000'))
( होगा ) या '{:.2E}'
पायथन 2.7+ में)। इस स्थिति के लिए कड़ाई से उपयोगी नहीं है, बिना किसी अतिरिक्त कार्यक्षमता के अतिरिक्त वर्णों के कारण, str.format
प्रारूप तर्कों के अधिक जटिल मिश्रण / पुन: व्यवस्थित / पुन: व्यवस्थित करने की अनुमति देता है।
format
। यह अधिक jazzy है ।
यहां format()
फ़ंक्शन का उपयोग करके एक उदाहरण दिया गया है:
>>> "{:.2E}".format(Decimal('40800000000.00000000000000'))
'4.08E+10'
प्रारूप के बजाय, आप एफ-स्ट्रिंग्स का उपयोग भी कर सकते हैं :
>>> f"{Decimal('40800000000.00000000000000'):.2E}"
'4.08E+10'
f"{Decimal('40800000000.00000000000000'):.2E}"
आपका नंबर दिया
x = Decimal('40800000000.00000000000000')
पायथन 3 से शुरू,
'{:.2e}'.format(x)
यह करने का अनुशंसित तरीका है
e
इसका मतलब है कि आप वैज्ञानिक अंकन चाहते हैं, और .2
इसका मतलब है कि आप डॉट के बाद 2 अंक चाहते हैं। तो आपको मिलेगाx.xxE±n
float(x)
से x को फ्लोट में बदल देगा।
किसी ने भी इसके संक्षिप्त रूप का उल्लेख नहीं किया है .format
विधि :
कम से कम अजगर 3.6 की जरूरत है
f"{Decimal('40800000000.00000000000000'):.2E}"
(मेरा मानना है कि यह सीस टिमरमैन की तरह ही है, बस थोड़ा छोटा है)
{num:E}
, जहां उदाहरण संख्या = 40800000000.00000000000000
उचित प्रारूप लेआउट का चयन करने के लिए पायथन स्ट्रिंग प्रारूपण से तालिकाओं को देखें । आपके मामले में %.2E
।
मेरे दशमलव बहुत बड़े हैं %E
इसलिए मुझे सुधार करना पड़ा:
def format_decimal(x, prec=2):
tup = x.as_tuple()
digits = list(tup.digits[:prec + 1])
sign = '-' if tup.sign else ''
dec = ''.join(str(i) for i in digits[1:])
exp = x.adjusted()
return '{sign}{int}.{dec}e{exp}'.format(sign=sign, int=digits[0], dec=dec, exp=exp)
यहां एक उदाहरण का उपयोग किया गया है:
>>> n = decimal.Decimal(4.3) ** 12314
>>> print format_decimal(n)
3.39e7800
>>> print '%e' % n
inf
"{:.2e}".format(n)
रिटर्न '3.39e+7800'
में अजगर 3.3.2 (v3.3.2: 16 मई 2013 00:06:53 d047928ae3f6,) [एमएससी v.1600 64 बिट (AMD64)] Win32 पर।
इसने मेरे लिए सबसे अच्छा काम किया:
import decimal
'%.2E' % decimal.Decimal('40800000000.00000000000000')
# 4.08E+10
यह "सरल" उत्तरों और टिप्पणियों की एक समेकित सूची है ।
from decimal import Decimal
x = '40800000000.00000000000000'
# Converted to Float
x = Decimal(x)
# ===================================== # `Dot Format`
print("{0:.2E}".format(x))
# ===================================== # `%` Format
print("%.2E" % x)
# ===================================== # `f` Format
print(f"{x:.2E}")
# =====================================
# ALL Return: 4.08E+10
print((f"{x:.2E}") == ("%.2E" % x) == ("{0:.2E}".format(x)))
# True
print(type(f"{x:.2E}") == type("%.2E" % x) == type("{0:.2E}".format(x)))
# True
# =====================================
IMPORT
की# NO IMPORT NEEDED FOR BASIC FLOATS
y = '40800000000.00000000000000'
y = float(y)
# ===================================== # `Dot Format`
print("{0:.2E}".format(y))
# ===================================== # `%` Format
print("%.2E" % y)
# ===================================== # `f` Format
print(f"{y:.2E}")
# =====================================
# ALL Return: 4.08E+10
print((f"{y:.2E}") == ("%.2E" % y) == ("{0:.2E}".format(y)))
# True
print(type(f"{y:.2E}") == type("%.2E" % y) == type("{0:.2E}".format(y)))
# True
# =====================================
# =====================================
x
# Decimal('40800000000.00000000000000')
y
# 40800000000.0
type(x)
# <class 'decimal.Decimal'>
type(y)
# <class 'float'>
x == y
# True
type(x) == type(y)
# False
x
# Decimal('40800000000.00000000000000')
y
# 40800000000.0
तो पायथन 3 के लिए, आप अभी के लिए तीनों में से किसी के बीच स्विच कर सकते हैं।
मेरा प्रिय:
print("{0:.2E}".format(y))
स्वरूप स्ट्रिंग में सटीक निर्दिष्ट करने की आवश्यकता के बिना दशमलव को वैज्ञानिक संकेतन में बदलने के लिए, और शून्य को पीछे किए बिना, मैं इसका उपयोग कर रहा हूं।
def sci_str(dec):
return ('{:.' + str(len(dec.normalize().as_tuple().digits) - 1) + 'E}').format(dec)
print( sci_str( Decimal('123.456000') ) ) # 1.23456E+2
किसी भी ट्रेलिंग शून्य को रखने के लिए, बस को हटा दें normalize()
।
यहाँ सबसे सरल है जो मुझे मिल सकता है।
format(40800000000.00000000000000, '.2E')
#'4.08E+10'
('ई' केस संवेदी नहीं है। आप '.2e' का भी उपयोग कर सकते हैं)
def formatE_decimal(x, prec=2):
""" Examples:
>>> formatE_decimal('0.1613965',10)
'1.6139650000E-01'
>>> formatE_decimal('0.1613965',5)
'1.61397E-01'
>>> formatE_decimal('0.9995',2)
'1.00E+00'
"""
xx=decimal.Decimal(x) if type(x)==type("") else x
tup = xx.as_tuple()
xx=xx.quantize( decimal.Decimal("1E{0}".format(len(tup[1])+tup[2]-prec-1)), decimal.ROUND_HALF_UP )
tup = xx.as_tuple()
exp = xx.adjusted()
sign = '-' if tup.sign else ''
dec = ''.join(str(i) for i in tup[1][1:prec+1])
if prec>0:
return '{sign}{int}.{dec}E{exp:+03d}'.format(sign=sign, int=tup[1][0], dec=dec, exp=exp)
elif prec==0:
return '{sign}{int}E{exp:+03d}'.format(sign=sign, int=tup[1][0], exp=exp)
else:
return None