Python中字符串格式化程序的默认舍入模式是什么?

时间:2013-12-24 09:47:44

标签: python python-2.7

>>> '%f'%0.8407745
'0.840774'
>>> '%f'%0.8407755
'0.840776'
>>> '%f'%-0.8407755
'-0.840776'
>>> '%f'%-0.8407745
'-0.840774'

结果看起来很奇怪。它有时是地板,有时是ceil。 Python中字符串格式化程序的默认舍入模式是什么?

2 个答案:

答案 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,了解原因。 (摘要:浮点数由二进制分数的总和表示)。