在 float 上使用 f 字符串格式打印 - 无法获取输出的生成方式

print with f-string formatting on float - unable to get how the output is generated

x = 100.1205
y = str(x)[6]

这意味着 y=0

当尝试执行以下代码时,输​​出为 100。

print ("{:.{}f}".format(x,y))

任何人都可以告诉它如何将 100 作为输出。

首先,让我们给字段编号:格式字符串 '{:.{}f}' 等同于 '{0:.{1}f}'.

位置1的参数是y,等于0,所以这等价于'{0:.0f}'代入。也就是说,它将位置 0 处的参数(即 x)格式化为浮点数,小数点后 0 位。

所以,结果是 '100',因为那是 x 到 0 个小数位。您可以尝试使用 y 的不同值来查看结果:

>>> '{:.{}f}'.format(100.1205, 0)
'100'
>>> '{:.{}f}'.format(100.1205, 1)
'100.1'
>>> '{:.{}f}'.format(100.1205, 2)
'100.12'
>>> '{:.{}f}'.format(100.1205, 3)
'100.121'
>>> '{:.{}f}'.format(100.1205, 4)
'100.1205'
>>> '{:.{}f}'.format(100.1205, 5)
'100.12050'

大括号是从外向内解释的,即最外层的大括号将被替换为 format() 的第一个参数,即 x,而最内层的大括号将被替换替换为 format() 的第二个参数,即 y。这里,x代表要显示的浮点数,y代表小数点后的有效数字。查看大量示例和文档 here

如果还不清楚,我先分解成单一格式操作,以便更好地理解:

>>> print ("{}".format(x))
100.1205

现在我们要做的就是trim去掉小数点后的所有有效数字,然后:

>>> print ("{:.0f}".format(x))
100

或者 trim 除一个以外的所有:

>>> print ("{:.1f}".format(x))
100.1

format()中添加另一个参数,即y,然后可以用y的值修改有效数字。

>>> print ("{:.{}f}".format(x,y)
100

x = 100.1205, y = str(x)[6]。这里 y = 0

首先要了解"{:.{}f}".format(x,y)。这里我们使用字符串的位置格式。然后我们可以看到x在位置0,y在位置1.

我们可以将 "{:.{}f}" 视为“{value of x:{value of y}f}

现在 x 的值为 100,y 的值为 0,所以字符串看起来像 “{100:.{0}f}”。这意味着小数点后有 0 位或没有数字

print("{:.{}f}".format(x,y)) 执行时将打印“100”