Как иметь отрицательный ноль, всегда отформатированный как положительный ноль в строке python?

У меня есть следующее, чтобы отформатировать строку:

'%.2f' % n

Если n - отрицательный нуль (-0, -0.000 и т.д.), выход будет -0.00.

Как сделать вывод всегда 0.00 для отрицательных и положительных нулевых значений n?

(Это довольно просто, но я не могу найти то, что я бы назвал кратким питоническим способом. В идеале есть вариант форматирования строк, о котором я не знаю.)

Ответ 1

Добавить ноль:

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

который вы можете форматировать:

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

Ответ 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

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"    

Ответ 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

Ответ 5

Очень тесно связана проблема: -0.00001 также форматируется как "-0,00". Это может быть так же запутанно. Ответы выше не позаботятся об этом (за исключением user278064, для которого требуется привязанное регулярное выражение).

Это уродливо, но это лучшее, что я могу сделать для этого случая:

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

Ответ 6

Вы можете использовать функцию abs

In [27]: abs(-0)
Out[27]: 0

In [28]: abs(-1)
Out[28]: 1

In [29]: abs(-2)
Out[29]: 2

In [30]: abs(-2) == -2
Out[30]: False

In [31]: abs(-2) == 2
Out[31]: True