2017-05-21 57 views
0

我使用這個代碼句號之後:圓形浮到2個位數蟒蛇

f = 0.3223322 
float('%.2f' % (f)) 

有更Python,更簡潔的方法,而不2件? 使用round是由下面的註釋泄氣從文檔

輪的行爲(),用於浮子可以是令人驚訝的:例如,圓形 (2.675,2)賦予2.67而不是預期的2.68。這不是 錯誤:這是由於大多數小數不能是 完全表示爲浮點數。有關更多信息,請參閱浮點算術:問題 和限制。

+2

請注意,float('%。2f'%f)'與round()具有完全相同的問題。這是因爲,正如文檔所述,這是浮點在計算機上運行的限制。在大多數情況下我都不會擔心。如果它確實很重要,我認爲最好使用'decimal'模塊,'fractions'模塊或一些任意的精確庫,這取決於具體的用例。 –

+0

你想要做什麼? – Ryan

回答

2

round(number[, ndigits])

>>> round(0.3223322, 2) 
0.32 

請注意,你可能仍然要產生輸出,由於浮點不精確時使用字符串格式化的一定精度。

取決於你想要達到的,它可能是適當的使用Decimal類型:

>>> from decimal import Decimal 
>>> round(Decimal(0.3223322), 2) 
Decimal('0.32') 

它做它的數學在(!驚喜)的十進制而不是二進制信號,因此不吃虧任何有小數舍入的問題(除非最初如果你想從浮點數創建它)。

1

好老,怎麼了,建在round()

使用它,像這樣:

round(input, digits) 

輸出示例:

>>> f = 0.3223322 
>>> round(f, 2) 
0.32 
0

這是不是很好,但我總是的粉絲:

f=float(int(100*f))/100 

遠離做到這一點的最佳方式,但這是我經常使用的一種方法。

0

我會去與round(),但如果你不喜歡它的行爲,你總是可以編寫自己的round()所以,對於completness的緣故:

def custom_round(number, ndigits=2): 
    return int(number * 10 ** ndigits)/10.0 ** ndigits if ndigits else int(number) 

請記住,這一輪,不像內置round()下降,不起來。