2014-01-18 434 views
3

我是一個python newbie.I剛熟悉格式化方法。format():ValueError:不允許在整數格式說明符中使用精度

從一本書,我讀學習Python

What Python does in the format method is that it substitutes each argument 
value into the place of the specification. There can be more detailed specifications 
such as: 
decimal (.) precision of 3 for float '0.333' 
>>> '{0:.3}'.format(1/3) 
fill with underscores (_) with the text centered 
(^) to 11 width '___hello___' 
>>> '{0:_^11}'.format('hello') 
keyword-based 'Swaroop wrote A Byte of Python' 
>>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python') 

在Python解釋器,如果我嘗試

print('{0:.3}'.format(1/3)) 

它給人的錯誤

File "", line 24, in 
ValueError: Precision not allowed in integer format specifier 

回答

6

要打印的浮動點數,你必須至少有一個輸入爲浮點數,像這樣

print('{0:.3}'.format(1.0/3)) 

如果兩個輸入都是除法運算符的整數,則返回的結果也將以int爲單位,小數部分被截斷。

輸出

0.333 

您可以將數據轉換爲float與float功能,這樣

data = 1 
print('{0:.3}'.format(float(data)/3)) 
+0

from __future__ import division語句複製這個是什麼「{0:0.3}是什麼意思?格式如何替代這些值? – liv2hak

6

這是更好地添加f

In [9]: print('{0:.3f}'.format(1/3)) 
0.000 

這樣你可以注意到那1/3給出一個整數然後糾正到1./31/3.

2

值得注意的是,這個錯誤只會發生在Python 2.在Python 3中,除法總是返回一個浮點數。

您可以在Python 2

~$ python 
Python 2.7.6 
>>> '{0:.3}'.format(1/3) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Precision not allowed in integer format specifier 
>>> from __future__ import division 
>>> '{0:.3}'.format(1/3) 
'0.333'