2011-04-26 76 views
2

我在使用十進制值時遇到了困難,在某些情況下需要使用十進制值,而在其他情況下則需要使用十進制值作爲字符串。具體來說,我有一個利率列表,例如:Python中的小數和科學記數法問題2.6.6

rates=[0.1,0.000001,0.0000001] 

而我正在使用這些來指定圖像的壓縮率。我需要最初將這些值作爲數字,因爲我需要能夠對它們進行排序以確保它們按特定順序排列。我還希望能夠將這些值中的每一個轉換爲字符串,以便1)將速率嵌入文件名中,2)將速率和其他詳細信息記錄在CSV文件中。第一個問題是,任何浮動超過6位小數在科學格式時轉換爲字符串:

>>> str(0.0000001) 
'1e-07' 

所以我使用Python的十進制模塊嘗試,但它也把一些浮科學記數法(貌似相反到我讀過的文檔)。例如:

>>> Decimal('1.0000001') 
Decimal('1.0000001') 
# So far so good, it doesn't convert to scientific notation with 7 decimal places 
>>> Decimal('0.0000001') 
Decimal('1E-7') 
# Scientific notation, back where I started. 

我也正在尋找字符串格式化建議在多個職位,但我沒有任何運氣。任何建議和指針都受到這位Python新手的讚賞。

回答

5

您必須指定字符串格式則:

["%.8f" % (x) for x in rates] 

這就產生['0.10000000', '0.00000100', '0.00000010']。也可以與Decimal一起使用。

5
'{0:f}'.format(Decimal('0.0000001')) 

以上應該爲你工作

+0

你會知道該怎麼做同樣的事情在Python 2.6.6? – sttaq 2017-10-05 12:55:31

4

% formatting,特別是浮點轉換:

'E' 浮點指數格式(小寫)。 (3)

'E'浮點指數格式(大寫)。 (3)

'f'浮點十進制格式。 (3)

'F'浮點十進制格式。 (3)

'g'浮點格式。如果指數小於-4或小於精度,則使用小寫指數格式,否則使用小數格式。 (4)

'G'浮點格式。如果指數小於-4或者不小於精度,則使用大寫指數格式,否則使用小數格式。 (4)

一個例子,使用f格式。

>>> ["%10.7f" %i for i in rates] 
[' 0.1000000', ' 0.0000010', ' 0.0000001'] 
>>> 

您還可以使用較新的(開始2.6)str.format()方法:

>>> ['{0:10.7f}'.format(i) for i in rates] 
[' 0.1000000', ' 0.0000010', ' 0.0000001'] 
>>>