新的Python打印格式语句为何返回不同结果?

3 投票
1 回答
581 浏览
提问于 2025-04-18 11:27

Python 2.7.5 及以上版本

新的格式写法 '{X.Yf}'.format(num) 似乎和旧的写法 '%X.Yf' % (num) 不太一样。有人能解释一下吗?

>>> '%8.3f' % (0.98567)
'   0.986'
>>> '%8.3f' % (1.98567)
'   1.986'

>>> '{num:8.3}'.format(num=0.98567)
'   0.986'
>>> '{num:8.3}'.format(num=1.98567)
'    1.99'

注意到旧的写法总是显示小数点后面有3位数字,而新的写法有时候显示2位,有时候显示3位。我是不是哪里搞错了?

1 个回答

6

在新的格式中也可以使用 f

>>> '{num:8.3f}'.format(num=1.98567)
'   1.986'

如果不指定格式类型,默认使用 g,而精度则被理解为数字的 位数(不包括小数点前的0)。如果小数点前有一个 1,那么小数点后只会显示2位数字。

如果你在旧的字符串格式中使用 g 而不是 f,你会看到相同的输出:

>>> '%8.3g' % (1.98567)
'    1.99'

撰写回答