为什么python中的0.500000与45.500000的差异使用'%。0f'?

时间:2015-08-08 05:03:10

标签: python python-2.7 string-formatting

最近,我在Python 2.7中学习了字符串格式化的艺术。 我决定玩浮点数。
遇到了一个尴尬的解决方案,如下所示。

print "%.0f"%45.5000000 #46
print "%.0f"%0.5000000 #0

#Why??

BUT

print int(round(45.5000000)) #46
print int(round(0.5000000)) #1

请帮助我理解为什么%f会显示此行为。

1 个答案:

答案 0 :(得分:7)

%.0f字符串格式的内部实现使用round-half-even舍入模式。

在Python 2中,round()函数使用round-away-from-zero。在Python 3中,was changed为圆形 - 甚至使其与字符串格式保持一致。

FWIW,decimal module为您提供了舍入模式选择,如果您想要更多的控制而不是round()提供的控制或字符串格式化。 decimal rounding modes是:ROUND_05UP ROUND_CEILING ROUND_DOWN ROUND_FLOOR ROUND_HALF_DOWN ROUND_HALF_EVEN ROUND_HALF_UP ROUND_UP。