【发布时间】:2014-11-04 16:18:33
【问题描述】:
我正在尝试生成一个字符串,其中包含一个带有尾随零的偶尔浮点数。这是文本字符串的 MWE,我尝试使用 {0:g} 删除它们:
xn, cod = 'r', 'abc'
ccl = [546.3500, 6785.35416]
ect = [12.350, 13.643241]
text = '${}_{{t}} = {0:g} \pm {0:g}\;{}$'.format(xn, ccl[0], ect[0], cod)
print text
不幸的是,这会返回:
ValueError: cannot switch from automatic field numbering to manual field specification
这个问题Using .format() to format a list with field width arguments 报告了同样的问题,但我不知道如何将那里给出的答案应用于这个问题。
【问题讨论】:
-
我不确定我是否理解您使用
g想要达到的目的。浮点文字中的尾随零没有任何意义,因此546.3500与546.35完全相同(无论您是否愿意,它们都会打印出相同的数字)。 -
@Blckknght 试试
print '{0} {0:g}'.format(50.0)。它们的打印方式不同。 -
当我再次阅读问题时,您是否想要
{:0g}而不是{0:g}?我不确定前者是否很有用,但它是有效的。 -
@Blckknght 我从这里采用了
{0:g}格式:stackoverflow.com/a/2440708/1391441 -
啊,所以
0只是从那篇帖子中继承下来的(只格式化一个值。我建议使用"${}_{{t}} = {:g} \pm {:g}\;{}$"作为你的格式字符串,然后在任何地方使用自动编号。它是只有当您混合使用自动和手动编号时才会出现错误。我的 cmets 询问是否由于编号导致的异常隐藏了一些更深层次的问题(格式无法按您想要的方式工作),但听起来像{:g}会做你想要的。
标签: python string formatting floating-point-precision