2012-05-17 5 views
3

일부 작은 숫자를 간단하고 읽기 쉬운 결과로 변환하려고합니다. 여기에 내 방법이 있지만 더 간단한 것이 있는지 궁금합니다.파이썬에서 음수 지수를 "반올림"

x = 8.54768039530728989343156856E-58 
y = str(x) 
print "{0}.e{1}".format(y.split(".")[0], y.split("e")[1]) 
8.e-58 

답변

4

이것은 매우 가깝습니다. 정확히 8.e-58이 필요하거나 읽기 쉽도록 줄이려고합니까?

>>> x = 8.54768039530728989343156856E-58 
>>> print "{0:.1e}".format(x) 
8.5e-58 

대안 : 파이썬 2.7 또는 3.1에, 당신은 위치를 나타내는 최초의 제로를 생략 할 수 있으므로 이런 "{:.1e}".format(x)

+0

합니다. 이것은 훨씬 간단합니다 - 감사합니다 – zach

3

같은 것이라고

>>> print "{0:.0e}".format(x) 
9e-58 

주 ?

>>> x = 8.54768039530728989343156856E-58 
>>> "{:.1e}".format(x) 
'8.5e-58' 
+0

예. 이거 훌륭해. – zach

1

문자열 조작을 수행하지 않고 지수를 추출하려는 경우 다른 방법이 있습니다. 당신이 원하는대로

def frexp_10(decimal): 
    logdecimal = math.log10(decimal) 
    return 10 ** (logdecimal - int(logdecimal)), int(logdecimal) 

>>> frexp_10(x) 
(0.85476803953073244, -57) 

형식 ...

+0

감사합니다 spinning_plate하지만 작고 단순한 찾고 있었어. – zach

0

두 가지 답이있다 : 수를 사용하여 하나의 간단한 표시 용입니다. 실제 번호는

: 내장 라운드() 함수는 임의의 소수 자릿수로 번호를 반올림한다

>>> round(3.1415,2) 
3.14 
>>> round(1.2345678e-10, 12) 
1.23e-10 

. 이 값을 사용하여 중요하지 않은 자릿수를 판독 값에서 잘라낼 수 있습니다.

표시를 위해 사용하는 디스플레이의 버전이 중요합니다. Python 2.x에서는 3.x에서 사용되지 않으므로 'e'포맷터를 사용할 수 있습니다.

>>> print "%6.2e" % 1.2345678e-10 
1.23e-10 

또는 3.X에서

, 사용 :

>>> print("{:12.2e}".format(3.1415)) 
    3.14e+00 
>>> print("{:12.2e}".format(1.23456789e-10)) 
    1.23e-10 

또는, 당신은 제로 좋아하는 경우에 : 잘

>>> print("{:18.14f}".format(1.23456789e-10)) 
    0.00000000