IT박스

과학적 표기법으로 소수 표시

itboxs 2020. 6. 27. 11:48
반응형

과학적 표기법으로 소수 표시


이것을 어떻게 표시 할 수 있습니까?

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

반응형