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

4

你好,我想动态调整浮点数的字符串表示中显示的小数位数,但是我找不到如何实现的信息。

E.g:

precision = 8

n = 7.12345678911

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

print(str_n)应该显示为 -> 7.12345678

但是我得到了一个"KeyError"。我错过了什么?


1
print('{0:.{1}}'.format(n, precision) - undefined
2个回答

7

除了@Talon之外,对于那些对f-strings感兴趣的人,这也适用。

precision = 8
n = 7.12345678911

print(f'{n:.{precision}f}')

3
您需要指定格式字符串中的 precision 来源于哪里:
precision = 8
n = 7.12345678911
print('{0:.{precision}}'.format(n, precision=precision))

第一次,您指定了要作为数字的参数的索引({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

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

>>> f"{123.45:.3}"
'1.23e+02'

将小数点后的数字舍去,只保留数字的前三位。可以在格式类型中提供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

我注意到,你必须在最后两个花括号之间加上f,否则字符串将以默认格式打印出来。 - undefined
很好的发现,我在答案中添加了解释。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接