Basic question about python f-strings, but couldn't find out the answer: how to force sign display of a float or integer number? i.e. what f-string makes 3
displayed as +3
?
From Docs:
Option Meaning '+'
indicates that a sign should be used for both positive as well as negative numbers. '-'
indicates that a sign should be used only for negative numbers (this is the default behavior).
Example from docs:
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always
'+3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
>>> '{:+} {:+}'.format(10, -10)
'+10 -10'
Above examples using f-strings:
>>> f'{3.14:+f}; {-3.14:+f}'
'+3.140000; -3.140000'
>>> f'{3.14:-f}; {-3.14:-f}'
'3.140000; -3.140000'
>>> f'{10:+} {-10:+}'
'+10 -10'
One caveat while printing 0
as 0 is neither positive nor negative. In python, +0 = -0 = 0
.
>>> f'{0:+} {-0:+}'
'+0 +0'
>>> f'{0.0:+} {-0.0:+}'
'+0.0 -0.0'
0.0
and -0.0
are different objects1.
In some computer hardware signed number representations, zero has two distinct representations, a positive one grouped with the positive numbers and a negative one grouped with the negatives; this kind of dual representation is known as signed zero, with the latter form sometimes called negative zero.
Update: From Python 3.11 and above, allows negative floating point zero as positive zero.
The
'z'
option coerces negative zero floating-point values to positive zero after rounding to the format precision. This option is only valid for floating-point presentation types.
Example from PEP682:
>>> x = -.00001 >>> f'{x:z.1f}' '0.0' >>> x = decimal.Decimal('-.00001') >>> '{:+z.1f}'.format(x) '+0.0'
1. Negative 0 in Python. Also check out Signed Zero (-0)