>>> '%f'%0.8407745
'0.840774'
>>> '%f'%0.8407755
'0.840776'
>>> '%f'%-0.8407755
'-0.840776'
>>> '%f'%-0.8407745
'-0.840774'
结果看起来很奇怪。它有时是地板,有时是ceil。 Python中字符串格式化程序的默认舍入模式是什么?
答案 0 :(得分:2)
根据此table here
,默认情况下%f
只有6位精度。因此,数据四舍五入到小数点后的6位数。
从该表的备注部分引用
备用表单会导致结果始终包含小数 即使没有数字也跟着它。
精度确定小数点后的位数 默认为6。
答案 1 :(得分:2)
浮点数始终是近似值。 0.8407745
不是完全 0.8407745
:
>>> '%.53f' % 0.8407745
'0.84077449999999998020427938172360882163047790527343750'
因此,默认格式化程序(舍入为6位小数)正确地将该值舍入为0.840774
。
0.8407755
是:
>>> '%.53f' % 0.8407755
'0.84077550000000000895994389793486334383487701416015625'
因此应该舍入 up 。
请参阅The Floating Point Guide,了解原因。 (摘要:浮点数由二进制分数的总和表示)。