格式字符串舍入错误

Sem*_*ime -1 python rounding format-string

根据可见小数位数的不同,舍入行为不同是错误还是预期行为?

通过交互式解释器进行演示

Python 3.8.10
>>> a = 1.555
>>> f'{a:.0f}'
'2'
>>> f'{a:.1f}'
'1.6'
>>> f'{a:.2f}'
'1.55'
>>> f'{a:.3f}'
'1.555'
Run Code Online (Sandbox Code Playgroud)

use*_*654 8

a由于浮点值的不精确表示,实际上略小于 1.555。

您可以看到这一点,例如,如下所示:

f"{a:.40f}"
'1.5549999999999999378275106209912337362766'
Run Code Online (Sandbox Code Playgroud)

或者,

f"{a:.64f}"
'1.5549999999999999378275106209912337362766265869140625000000000000'
Run Code Online (Sandbox Code Playgroud)