使用*设置宽度和精度

1 投票
2 回答
647 浏览
提问于 2025-04-15 16:10

我正在通过一本书学习Python,遇到了这个例子:

>>> '%f, %.2f, %.*f % (1/3.0, 1/3.0, 4, 1/3.0)
# Result: '0.333333, 0.33, 0.3333'

我不太明白这里发生了什么,特别是中间的那个'4'。

2 个回答

1

你发的那行代码里有两个语法错误。1.3.0 不是一个有效的数字,而且字符串没有结束。

下面是一个有效的字符串格式的版本。

'%f, %2.f, %.*f' % (1/3.0, 1/3.0, 4, 1/3.0)

并且输出是:

'0.333333, 0.33, 0.3333'

我在官方文档里找不到关于 %.*f 的说明。不过,看起来它是在解析4这个数字,表示你想要下一个参数有多少位小数。

举个例子:

'%.*f' % (5, 1/3.0)

返回

'0.33333'

'%.*f' % (6, 1/3.0)

返回

'0.333333'

这似乎是一种提供可变长度精度的方法,这样你可以让用户自己指定。

3

我想你是想表达这样的意思:

>>> '%f, %2.f, %.*f' % (1/3.0, 1.3, 4, 1/3.0)
'0.333333,  1, 0.3333'

4 是一个通配符值,用来代替星号 *。当它被展开时,相当于:

>>> '%f, %2.f, %.4f' % (1/3.0, 1.3, 1/3.0)

撰写回答