避免在新的python字符串格式中舍入

时间:2014-02-14 03:21:28

标签: python string format

我想用脚本中的新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

如何避免在这里舍入并使用新的格式语法获取旧输出?

2 个答案:

答案 0 :(得分:5)

将参数显式转换为int s:

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

顺便说一句,如果使用Python 2.7 +,Python 3.1+(自动编号),则不需要指定参数索引({0}{1},..)。

答案 1 :(得分: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

要完全控制演示文稿,可以将float预转换为整数。根据您的需要,有几种方法可以做到这一点:

>>> 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