【问题标题】:How to have negative zero always formatted as positive zero in a python string?python - 如何在python字符串中始终将负零格式化为正零?
【发布时间】:2016-04-14 00:59:01
【问题描述】:

我有以下格式化字符串:

'%.2f' % n

如果n 是负零(-0-0.000 等),则输出将为-0.00

对于n 的负零和正零值,如何使输出始终为0.00

(实现这一点相当简单,但我找不到我称之为简洁的pythonic方式。理想情况下,有一个我不知道的字符串格式化选项。)

【问题讨论】:

标签: python


【解决方案1】:

加零:

>>> a = -0.0
>>> a + 0
0.0

你可以格式化:

>>> '{0:.3f}'.format(a + 0)
'0.000'

【讨论】:

  • 这真的让我笑出声来。太棒了。
  • 在您的示例中,您可以将0. 更改为0
  • 感谢@eumiro,这正是我想要的。
  • 太棒了。尽管我确信有人会使用这个技巧阅读一些代码并且会想“他为什么要在他的所有浮点数中添加零?!”
【解决方案2】:

一个非常相关的问题是 -0.00001 也被格式化为“-0.00”。这可能同样令人困惑。上面的答案不会解决这个问题(除了 user278064,它需要一个锚定的正则表达式)。

这很丑,但这是我能为这种情况做的最好的:

import re
re.sub (r"^-(0\.?0*)$", r"\1", "%.2f" % number)

【讨论】:

  • 如果round(v * 1000) == 0: v= 0.0
  • 对于我的例子,我猜你的意思是v*100。也许更简单的版本是:if round(v,2) == 0: v= 0.0。问题是这会在打印后改变 v 的值,这是不好的。那么怎么样:"%.2f" % (0.0 if round(v,2) == 0 else v).
【解决方案3】:

最直接的方法是在你的格式中特殊化零:

>>> a = -0.0
>>> '%.2f' % ( a if a != 0 else abs(a) )
0.0

但是,请注意 str.format 方法优于 % 替换 - 在这种情况下(以及在大多数简单情况下)的语法几乎相同:

>>> '{:.2f}'.format(a if a != 0 else abs(a))

另请注意,更简洁的a or abs(a) 似乎并不 - 即使bool(a)False

【讨论】:

    【解决方案4】:
    >>> x= '{0:.2f}'.format(abs(n) if n==0 else n)
    >>> print(x) 
    0.00
    

    if 条件的原因:

    >>> -0.0000==0
    True
    >>> 0.000==0
    True
    >>> 0.0==0
    True
    

    【讨论】:

    • @jamylak 啊!我错过了 else 条件。
    • 你可以把它缩短成这个'{0:.2f}'.format(abs(n) if n==0 else n)
    • @jamylak 建议已实施。
    【解决方案5】:
    import re
    re.sub("[-+](0\.0+)", r"\1", number)
    

    例如:

    re.sub("[-+](0\.0+)", r"\1", "-0.0000") // "0.0000"
    re.sub("[-+](0\.0+)", r"\1", "+0.0000") // "0.0000"    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-27
      • 2022-09-23
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2011-05-04
      相关资源
      最近更新 更多