이것을 어떻게 표시 할 수 있습니까?
10 진수 ( '40800000000.00000000000000')를 '4.08E + 10'으로?
나는 이것을 시도했다 :
>>> '%E' % Decimal('40800000000.00000000000000')
'4.080000E+10'
그러나 여분의 0이 있습니다.
이것을 어떻게 표시 할 수 있습니까?
10 진수 ( '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'에는 다른 숫자와 동일한 의미를 가진 더 많은 중요한 0이 있습니다. 그래서 어디에서 멈추고 싶은지 명시해야합니다.
후행 0을 모두 자동으로 제거하려면 다음을 시도하십시오.
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}'
Python 2.7 이상 에서). 추가 된 기능이없는 추가 문자로 인해이 상황에 유용하지는 않지만 str.format
형식 인수의 더 복잡한 믹싱 / 재정렬 / 재사용이 가능합니다.
format
. 더 재즈 입니다.
당신의 번호를
x = Decimal('40800000000.00000000000000')
파이썬 3부터
'{:.2e}'.format(x)
권장되는 방법입니다.
e
과학적 표기법 .2
을 원하고 점 뒤에 2 자리 숫자를 원한다는 의미입니다. 그래서 당신은 얻을 것이다x.xxE±n
float(x)
는 x를 float로 변환합니다.
이 .format
방법 의 짧은 형식을 언급 한 사람은 없습니다 .
적어도 Python 3.6이 필요합니다
f"{Decimal('40800000000.00000000000000'):.2E}"
(나는 그것이 조금 더 짧은 Cees Timmerman과 같다고 생각한다)
{num:E}
num = 40800000000.00000000000000
적절한 형식 레이아웃을 선택하려면 Python 문자열 형식의 테이블을 참조하십시오 . 귀하의 경우에는 %.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 : d047928ae3f6 5 월 16 일 2013 년 0시 6분 53초)는 Win32에서 [MSC v.1600 64 비트 (AMD64)].
이것은 "간단한" 답변 및 의견 의 통합 목록입니다 .
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
따라서 Python 3의 경우 지금 세 가지 중 하나를 전환 할 수 있습니다.
내 즐겨 찾기 :
print("{0:.2E}".format(y))
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