2012-10-31 36 views
1

控制在Python中打印64位浮點數的最佳方式是什麼?控制精度/指數的打印

我可以使用%e說明符以指數格式輕鬆顯示所有數字。但是,我只想使用指數格式,如果該數字的數量超過x的數量。例如,下面是原始64位浮點數什麼,我想它看起來像一個字符串:

value  what's printed 

1.123456 1.123456 
123456.1234 12345.6e4 
1.0   1.0 
.1234567 1.23456e-1 

在上面,我只希望看到共有7個數字,然後轉換成指數形式,如果有更需要。

這是否有意義?基本上我希望只有在達到某個數字的閾值時才能使用指數符號。我知道%e允許像%.3e這樣的說明符,但不管數字大小如何,它都會使用指數表示法。

+1

'123456.1234 12345.6e4'這就是科學記數法不如何工作 – SilentGhost

+0

對不起,你的權利。我沒有仔細檢查我的提交。我真正想要的是隻有在整數中有一定數量的數字時才使用科學記數法的方法。 –

回答

1

你或許可以編造一些與'%g' - 將使用的%f%e短:

>>> '%.4g'%(1154.2) 
'1154' 
>>> '%.4g'%(11545.2) 
'1.155e+04' 
>>> '%.4g'%(1.15452) 
'1.155' 
>>> '%.4g'%(0.000005321) 
'5.321e-06' 

換句話說,這將打印出一批有4顯著位,並使用科學記數法,其中必要。

+1

'%g'似乎只適用於大數字:''%.6g'%(.123456789123456789)'打印''0.123457'它不觸發科學記數法。 –

+0

@ durden2.0 - 我不確定你的意思只是爲小數字工作 - 請參閱我的編輯。 – mgilson

+0

@ durden2.0:或者你可以改變你的規格。看起來你似乎有點奇怪的要求。 – SilentGhost

1

我想我可以做這樣的事情:

>>> def pretty_float(val): 
... if len(repr(val)) > 7: 
...  return '%e' % val 
... else: 
...  return repr(val) 
... 
+1

僅作爲回答發佈,因爲我無法在評論中放置更長的代碼段。這個解決方案似乎有點過分,我不知道是否有一種很好的方法來'破解'%e'或'%g'指示符來做這樣的事情。 –

+0

我認爲這可能是我需要的最直接的方法,並且絕對是顯而易見的(雖然是一個奇怪的限制)。做這種事情有缺點嗎? –

+0

當指數小於-4或大於15時,repr使用指數格式。因此,您必須首先檢查它是否已經包含'e'。此外,'%e'的默認精度爲6.您必須使用repr的長度來設置所需的精度,並對''0.x''字符串進行特殊處理。 – eryksun