2017-02-27 133 views
8

在Python中,如果後一種情況需要我將打印輸出限制爲一定數量的數字,如何打印一個可能是整數或實數類型的數字?打印一個整數或小數點後n位的浮點數

長話短說,說我們有下面的例子:

print("{0:.3f}".format(num)) # I cannot do print("{}".format(num)) 
          # because I don't want all the decimals 

是否有「Pythy」的方式,以確保如萬一num == 1,我打印的1代替1.000(我的意思是不是塞滿我的if語句代碼等)

+0

部分原因是'int'治療'.3'方法一樣「浮動」不是說完全忽略它。 –

+0

我的猜測是否定的,你至少需要在一路上做一個三元運算符,我相當肯定你把它算作'if'。 –

回答

10

使用Python 3 *,你可以只使用round()因爲除了四捨五入float S,當適用於整數它總是會返回一個int

>>> num = 1.2345 
>>> round(num,3) 
1.234 
>>> num = 1 
>>> round(num,3) 
1 

這種行爲記錄在help(float.__round__)

Help on method_descriptor: 

__round__(...) 
    Return the Integral closest to x, rounding half toward even. 
    When an argument is passed, work like built-in round(x, ndigits). 

而且help(int.__round__)

Help on method_descriptor: 

__round__(...) 
    Rounding an Integral returns itself. 
    Rounding with an ndigits argument also returns an integer. 

*使用Python 2,round()總是return是個float

+1

我從來不知道'圓'是如此多才多藝。我從來沒有想過在int中使用它。 –

+0

不確定它是否重要,但是這將不會與具有較短浮點值的問題中的格式規格相同(即,「1.2」與「1.200」)。 – ekhumoro

+0

@ekhumoro是的,我同意它不是很清楚期望的行爲是什麼,我提出了你的解決方案 –

1

如果使用浮點的固定號碼,你可以只使用一個替換刪除多餘0。例如,這會做的伎倆:

print("{:.3f}".format(1).replace(".000", "")) 
+0

非常適用,除非要求將'1.0'顯示爲'1.000'。 –

4

如果你需要保持一個固定寬度的浮點值,你可以使用printf-style formatting,像這樣:

問題
>>> num = 1 
>>> print('%0.*f' % (isinstance(num, float) * 3, num)) 
1 
>>> num = 1.2345 
>>> print('%0.*f' % (isinstance(num, float) * 3, num)) 
1.234 
>>> num = 1.2 
>>> print('%0.*f' % (isinstance(num, float) * 3, num)) 
1.200