.format() 在使用 0:g 删除尾随零时返回 ValueError

Posted

技术标签:

【中文标题】.format() 在使用 0:g 删除尾随零时返回 ValueError【英文标题】:.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 格式:***.com/a/2440708/1391441 啊,所以 0 只是从那篇帖子中继承下来的(只格式化一个值。我建议使用 "$_t = :g \pm :g\;$" 作为你的格式字符串,然后在任何地方使用自动编号。它是只有当您混合使用自动和手动编号时才会出现错误。我的 cmets 询问是否由于编号导致的异常隐藏了一些更深层次的问题(格式无法按您想要的方式工作),但听起来像:g会做你想要的。 【参考方案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,但有四个参数...

以上是关于.format() 在使用 0:g 删除尾随零时返回 ValueError的主要内容,如果未能解决你的问题,请参考以下文章

BigDecimal 去除尾随零

从String中删除尾随数字

删除前导零和尾随零并将结果保留到小数点后两位

如何从双精度中删除尾随零 [重复]

d3.format "none" 类型不四舍五入

如何使用正则表达式删除尾随空格?