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