如何在python字符串中将负零始终格式化为正零?

时间:2012-06-13 08:11:38

标签: python

我有以下格式化字符串:

'%.2f' % n

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

如何为0.00的负零值和正零值设置输出n

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

5 个答案:

答案 0 :(得分:52)

添加零:

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

你可以格式化:

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

答案 1 :(得分:3)

一个非常密切相关的问题是-0.00001也被格式化为" -0.00"。这可能同样令人困惑。上面的答案不会处理这个问题(user278064' s除外,它需要一个锚定的正则表达式。)

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

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

答案 2 :(得分:2)

最直接的方法是将格式设为零:

>>> 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

答案 3 :(得分:1)

import re
re.sub("[-+](0\.0+)", r"\1", number)

e.g:

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

答案 4 :(得分:1)

>>> 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