【问题标题】:How to dynamically format string representation of float number in python?如何在python中动态格式化浮点数的字符串表示形式?
【发布时间】:2020-05-10 09:36:46
【问题描述】:

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

例如:

precision = 8

n = 7.12345678911

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

print(str_n) 应该显示 -> 7.12345678

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

【问题讨论】:

  • print('{0:.{1}}'.format(n, precision)

标签: python string formatting


【解决方案1】:

您需要在格式字符串中指定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 提供给(See the documentation) 格式的类型,以获得带有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,否则字符串将以默认格式打印。
  • 很好,我在答案中添加了解释
猜你喜欢
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多