如何在Python中动态格式化浮点数的字符串表示形式?

Jul*_*xen 5 python string formatting

您好,我想动态调整浮点数字符串表示形式的显示小数位,但我找不到有关如何执行此操作的任何信息。

例如:

precision = 8

n = 7.12345678911

str_n = '{0:.{precision}}'.format(n)

print(str_n)应该显示->7.12345678

但我却收到了“KeyError”。我缺少什么?

Pro*_*rox 8

除了@Talon之外,对于那些对 f 字符串感兴趣的人来说,这也有效。

precision = 8
n = 7.12345678911

print(f'{n:.{precision}f}')
Run Code Online (Sandbox Code Playgroud)


Tal*_*lon 4

您需要指定precision格式字符串的来源:

precision = 8
n = 7.12345678911
print('{0:.{precision}}'.format(n, precision=precision))
Run Code Online (Sandbox Code Playgroud)

第一次,您使用索引 ( {0}) 指定要作为数字的参数,因此格式化函数知道从哪里获取参数,但是当您通过某个键指定占位符时,您必须显式指定钥匙。

混合使用这两个系统有点不寻常,我建议保留一个:

print('{number:.{precision}}'.format(number=n, precision=precision))  # most readable
print('{0:.{1}}'.format(n, precision))
print('{:.{}}'.format(n, precision))  # automatic indexing, least obvious
Run Code Online (Sandbox Code Playgroud)

值得注意的是,这些精度值将包括点之前的数字,因此

>>> f"{123.45:.3}"
'1.23e+02'
Run Code Online (Sandbox Code Playgroud)

将给出小数点并仅给出数字的前三位数字。相反,f可以将 提供给格式的类型(请参阅文档)以获得带有十进制precision数字的定点格式。

print('{number:.{precision}f}'.format(number=n, precision=precision))  # most readable
print('{0:.{1}f}'.format(n, precision))
print('{:.{}f}'.format(n, precision))  # automatic indexing, least obvious
Run Code Online (Sandbox Code Playgroud)