2012-03-28 21 views
18

Czy można ustawić liczbę cyfr, które będą używane do drukowania wykładnika liczby zmiennoprzecinkowej? Chcę ustawić ją na 3.Python - liczba cyfr w wykładniku

Obecnie

f = 0.0000870927939438012 
>>> "%.14e"%f 
'8.70927939438012e-05' 
>>> "%0.14e"%f 
'8.709279e-005' 

Co chcę wydrukować to: '8.70927939438012e-005'

+2

Dlaczego Drugi przykład ma mniejszą precyzję i 3 cyfry w wykładnik? –

+0

Na mojej maszynie "% e"% f wyprowadza "8.709279e-05" i "% 0.14e"% f wyjść "8.70927939438012e-05". Również większa precyzja powinna być możliwa w przypadku bibliotek takich jak mpmath. Jednak nie wiem, czy to pasuje do twoich potrzeb. – aruseni

Odpowiedz

17

Jest żaden sposób kontrolować, że najlepszym sposobem jest napisać funkcję w tym np

def eformat(f, prec, exp_digits): 
    s = "%.*e"%(prec, f) 
    mantissa, exp = s.split('e') 
    # add 1 to digits as 1 is taken by sign +/- 
    return "%se%+0*d"%(mantissa, exp_digits+1, int(exp)) 

print eformat(0.0000870927939438012, 14, 3) 
print eformat(1.0000870927939438012e5, 14, 3) 
print eformat(1.1e123, 4, 4) 
print eformat(1.1e-123, 4, 4) 

wyjściowa:

8.70927939438012e-005 
1.00008709279394e+005 
1.1000e
1.1000e-
+2

Anurag, istnieją różne sposoby na manipulowanie nim jako ciągiem i uzyskanie trzech cyfr w wykładniku. Tym, co mnie interesowało, jest uniknięcie manipulacji ciągami, ponieważ drugi przykład w moim poście pokazuje, że Python natywnie wykorzystuje trzy cyfry. Wciąż nie jestem pewien, dlaczego tak się dzieje, jak również zadałeś powyżej. Po prostu znalazłem to podczas eksperymentowania. – nmadzharov

+0

@nmadzharov Nie sądzę, że istnieje publiczna funkcja dla tego, powinieneś spróbować spojrzeć na kod Pythona, aby zobaczyć, co faktycznie robi, choć nie widzę 3 cyfry w wykładniku na python 2.7 –

+0

@Anurag: trzy- na niektórych platformach pojawiły się wykładniki cyfrowe dla Pythona 2.5; zostało to naprawione w Pythonie 2.6 (jak sądzę). Więcej informacji można znaleźć na stronie http://bugs.python.org/issue1600. –