我有以下格式化字符串:
'%.2f' % n
如果n
是负零(-0
等-0.000
),则输出为-0.00
。
如何使输出始终0.00
为负零和正零值n
?
(实现这一点相当简单,但我找不到我称之为简洁的pythonic方式。理想情况下,有一个我不知道的字符串格式化选项。)
我有以下格式化字符串:
'%.2f' % n
如果n
是负零(-0
等-0.000
),则输出为-0.00
。
如何使输出始终0.00
为负零和正零值n
?
(实现这一点相当简单,但我找不到我称之为简洁的pythonic方式。理想情况下,有一个我不知道的字符串格式化选项。)
加零:
>>> a = -0.0
>>> a + 0
0.0
您可以格式化:
>>> '{0:.3f}'.format(a + 0)
'0.000'
一个非常密切相关的问题是 -0.00001 也被格式化为“-0.00”。这可能同样令人困惑。上面的答案不会解决这个问题(除了 user278064,它需要一个锚定的正则表达式)。
这很难看,但这是我能为这种情况做的最好的事情:
import re
re.sub (r"^-(0\.?0*)$", r"\1", "%.2f" % number)
最直接的方法是在您的格式中特殊化零:
>>> 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
.
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"
>>> 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