과학적 표기법으로 소수 표시
이것을 어떻게 표시 할 수 있습니까?
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()
함수 를 사용하는 예입니다 .
>>> "{:.2E}".format(Decimal('40800000000.00000000000000'))
'4.08E+10'
당신의 번호를
x = Decimal('40800000000.00000000000000')
파이썬 3부터
'{:.2e}'.format(x)
권장되는 방법입니다.
e
과학적 표기법 .2
을 원하고 점 뒤에 2 자리 숫자를 원한다는 의미입니다. 그래서 당신은 얻을 것이다x.xxE±n
이 .format
방법 의 짧은 형식을 언급 한 사람은 없습니다 .
Python 3.6 이상이 필요합니다
f"{Decimal('40800000000.00000000000000'):.2E}"
(나는 그것이 조금 더 짧은 Cees Timmerman과 같다고 생각한다)
적절한 형식 레이아웃을 선택하려면 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
이것은 나를 위해 가장 잘 작동했습니다.
import decimal
'%.2E' % decimal.Decimal('40800000000.00000000000000')
# 4.08E+10
형식 문자열에 정밀도를 지정하지 않고 후행 0을 포함하지 않고 Decimal을 과학 표기법으로 변환하려면 현재 사용하고 있습니다.
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
후행 0을 유지하려면을 제거하십시오 normalize()
.
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
파이썬 3.x 방식을 선호합니다.
cal = 123.4567
print(f"result {cal:.4E}")
4
부동 부분에 표시되는 자릿수를 나타냅니다.
cal = 123.4567
totalDigitInFloatingPArt = 4
print(f"result {cal:.{totalDigitInFloatingPArt}E} ")
참고 URL : https://stackoverflow.com/questions/6913532/display-a-decimal-in-scientific-notation
'IT박스' 카테고리의 다른 글
Amazon S3 버킷의 모든 파일을 나열하는 빠른 방법은 무엇입니까? (0) | 2020.06.27 |
---|---|
Android : "프로젝트 경로에는 세그먼트가 하나만 있어야합니다" (0) | 2020.06.27 |
pyplot으로 원을 그리다 (0) | 2020.06.27 |
URL이 유효한지 확인하는 가장 좋은 방법 (0) | 2020.06.27 |
C에서 한 구조체를 다른 구조체에 할당 (0) | 2020.06.27 |