f 字符串格式:显示数字符号?

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

关于 python f 字符串的基本问题,但找不到答案:如何强制浮点数或整数的符号显示?即什么 f 字符串使

3
显示为
+3

python python-3.x string f-string
5个回答
21
投票

来自文档:

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

文档示例:

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

在某些计算机硬件中

有符号数字表示零有两种不同的表示,正数与正数分组,负数与负数分组;这种对偶表示形式称为有符号零,后一种形式有时称为负零。

更新: 从 Python 3.11 及更高版本开始,允许负浮点零作为正零。

'z'

 选项在舍入到格式精度后将负零浮点值强制转换为正零。此选项仅对浮点表示类型有效。

示例来自

PEP682

>>> x = -.00001 >>> f'{x:z.1f}' '0.0' >>> x = decimal.Decimal('-.00001') >>> '{:+z.1f}'.format(x) '+0.0'


1. Python 中的负 0。另请查看有符号零 (-0)


5
投票
您可以在 f 字符串中使用

:+


number=3 print(f"{number:+}")
输出

+3


    


3
投票
您可以使用

f"{x:+}"

 添加带有 f 字符串的符号,其中 
x
 是您需要添加符号的 int/float 变量。有关语法的更多信息,您可以参考
文档


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
看起来我有最快的整数解决方案。


-3
投票
使用 if 语句 if x > 0: .. "" else: .

© www.soinside.com 2019 - 2024. All rights reserved.