2012-03-28 53 views
18

浮動小数点数の指数を印刷する桁数を設定することはできますか?私は私が印刷したい何Python - 指数部の桁数

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

があり、現在3

に設定したい: '8.70927939438012e-005'

+2

どのように第二の例は以下の精度と指数の3桁の数字を持って来ますか? –

+0

私のマシン "%e"%fは "8.709279e-05"を出力し、 "%0.14e"%fは "8.70927939438012e-05"を出力します。また、mpmathなどのライブラリではより高い精度が可能でなければなりません。しかし、あなたのニーズに合っているかどうかはわかりません。 – aruseni

答えて

17

それを制御する方法はありません、最良の方法は、関数を記述することですこれは例えば

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) 

出力:

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

Anurag、これを文字列として操作し、指数の3桁を取得するにはさまざまな方法があります。私が関心を持っていたのは、私の記事の2番目の例では、Pythonがネイティブで3桁の数字を使用することがあるため、文字列操作を避けることです。あなたが上でも尋ねたように、なぜそれがそうするのかまだ分かりません。私は実験中にそれを見つけました。 – nmadzharov

+0

@nmadzharov私はPythonの2.7で指数部に3桁は表示されませんが、実際に何をしているのかを見るためにPythonコードを調べてみる必要があります。 –

+0

@Anurag: Python 2.5のいくつかのプラットフォームでは数字の指数が表示されました。これはPython 2.6で修正されました(私は信じています)。詳細についてはhttp://bugs.python.org/issue1600を参照してください。 –

関連する問題