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

问题描述 投票:0回答:6

我有以下内容来格式化字符串:

'%.2f' % n

如果

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

如何使

0.00
的负零值和正零值始终输出
n

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

python
6个回答
105
投票

加零:

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

您可以格式化:

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

8
投票

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

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

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

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


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

1
投票
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"    

0
投票

对于 python >=3.11,最好使用

z
格式说明符:

实现这一点
>>> a = -0.00001
>>> f"{a:z.2f}"
'0.00'
© www.soinside.com 2019 - 2024. All rights reserved.