f-string格式化:如何显示数字符号?

11
关于Python f-strings的基本问题,但是我找不到答案:如何强制显示浮点数或整数的符号?即哪个f-string可以将3显示为+3

你是否正在寻找类似于行显示的解决方案?(没有任何说明?) - Vincent Bénet
5个回答

20

来自文档:

选项 含义
'+' 表示应该为正数和负数都使用符号
'-' 表示只有负数应该使用符号(这是默认行为)。

文档示例:

>>> '{:+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'

上述例子使用了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'

在打印0时需要注意0既不是正数也不是负数。在Python中,+0 = -0 = 0

>>> f'{0:+} {-0:+}'
'+0 +0'
>>> f'{0.0:+} {-0.0:+}'
'+0.0 -0.0'

0.0-0.0是不同的对象1

在一些计算机硬件有符号数值表示中,零有两个不同的表示形式,一个与正数一起分组的正表示形式和一个与负数一起分组的负表示形式;这种双重表示形式称为带符号零,后一种形式有时被称为负零。


1. Python中的负零。还可以查看带符号的零(-0)


5
您可以在f-string中使用:+
number=3
print(f"{number:+}")

输出+3


3
最快的解决方案:f"{['', '+'][number>0]}{number}"
numbers = [+3, -3]

for number in numbers:
    print(f"{['', '+'][number>0]}{number}")

结果:

+3
-3

编辑:小时间分析:

import time

numbers = [+3, -3] * 1000000

t0 = time.perf_counter()
[print(f"{number:+}", end="") for number in numbers]
t1 = time.perf_counter()
[print(f"{number:+.2f}", end="") for number in numbers]
t2 = time.perf_counter()
[print(f"{['', '+'][number>0]}{number}", end="") for number in numbers]
t3 = time.perf_counter()
print("\n" * 50)
print("""number:+ : """ + str(round(t1-t0, 2)) + "s")
print("""number:+.2f : """ + str(round(t2-t1, 2)) + "s")
print("""['', '+'][number>0] : """ + str(round(t3-t2, 2)) + "s")

结果:

number:+ : 1.43s
number:+.2f : 1.98s
['', '+'][number>0] : 1.23s

看起来我有最快的整数解决方案。


1
有点神秘,但我喜欢这个解决方案,使用数字>0的结果作为索引!非常聪明。 - Christian
聪明而确实神秘。当number>0时,将计算为True或False。Python方便地将True硬编码为1,False为0。因此,['', '+'][number>0]是一个带下标的列表,并且周围的{}强制执行评估。 - ShpielMeister
1
值得注意的是,这也可以用于在负数(财务等)周围放置括号(或其他任何内容),例如 f"{['(', ''][n>=0]}{n:3.4}{[')', ''][n>=0]}" -> (-2.455) - 我找不到其他方法来实现这个。 - undefined

2
你可以使用f-string添加符号,格式为f"{x:+}",其中x是需要添加符号的整数/浮点数变量。有关语法的更多信息,请参考文档

-3

使用 if 语句:如果 x > 0,则执行 .. "",否则执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接