【问题标题】:.format() returns ValueError when using {0:g} to remove trailing zeros.format() 在使用 {0:g} 删除尾随零时返回 ValueError
【发布时间】: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.3500546.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


【解决方案1】:

{} 使用自动字段编号。 {0:g} 使用手动字段编号。

不要将两者混为一谈。如果您要使用手动字段编号,请在任何地方使用它:

text = '${0}_{{t}} = {1:g} \pm {2:g}\;{3}$'.format(xn, ccl[0], ect[0], cod)

【讨论】:

  • 很好的答案 unubtu,小修正,也许你的意思是:${0}_{{t}} = {1:g} \pm {2:g}\;{3}$?
  • 谢谢加布里埃尔。我不确定要使用什么字段编号,因为原始代码使用了两次{0:g},但有四个参数...
猜你喜欢
  • 2011-05-30
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 2020-07-23
  • 2019-08-04
  • 2014-11-05
  • 2018-09-28
相关资源
最近更新 更多