2014-02-14 52 views
4

我想在我的腳本中用新的Python字符串格式化語法替換舊的字符串格式化行爲,但如何避免當我處理浮動時四捨五入?避免在新的Python字符串格式化四捨五入

老版

print ('%02d:%02d:%02d' % (0.0,0.9,67.5)) 

產生00:00:67

,而我的(顯然是錯誤的)翻譯成新的語法

print ('{0:0>2.0f}:{1:0>2.0f}:{2:0>2.0f}'.format(0.0,0.9,67.5)) 

產量00:01:68

如何避免在此處舍入並使用新格式語法獲取舊輸出?

+0

除了答案,檢查了這一點太:http://stackoverflow.com/questions/13511612/format-float-as-int – dpatro

回答

5

明確的參數轉換爲int S:

>>> '{:02}:{:02}:{:02}'.format(int(0.0), int(0.9), int(67.5)) 
'00:00:67' 

BTW,你不需要指定參數索引({0}{1},..)如果你使用Python 2.7+,Python的3.1以上版本(自動編號)。

+0

哎呀,你顯式轉換爲'int' :(我認爲'格式'有一種方法來截斷小數部分。 – thefourtheye

1

的「規則」很簡單:

'%d' % 7.7   # truncates to 7 
'%.0f' % 7.7  # rounds to 8 
format(7.7, 'd') # refuses to convert 
format(7.7, '.0f') # rounds to 7 

要具有對錶示完全控制,可以將浮動預轉換爲整數。有幾種方法可以做到這一點取決於你的需求:

>>> math.trunc(f) # ignore the fractional part 
67 
>>> math.floor(f) # round down 
67 
>>> math.ceil(f) # round up 
68 
>>> round(f)  # round nearest 
68