最近,我在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
会显示此行为。
答案 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。