为什么Python打印负虚部复数会出现(-0-5j)的奇怪输出?
Python复数输出格式规则说明
Python的复数类型固定由实部、虚部系数两个IEEE754双精度浮点数组成,默认a + bj结构中a为实部,b为虚部系数,打印复数的输出逻辑如下:
示例代码拆解
运行代码:
t1 = 5j t2 = -5j print(t1) print(t2)
得到输出:
5j (-0-5j)
具体输出规则
- 虚部系数为正数时,输出会自动省略冗余的正实部和加号:
5j等价于complex(0.0, 5.0),实部为正0、虚部为正,直接省略实部和加号,输出为5j。 - 虚部系数为负数时,输出格式会调整为
(实部-虚部绝对值j):- 加括号是为了避免歧义,防止前置负号被误认为是对整个复数取反,导致复制执行时得到错误的值。
- 这里的
-0是浮点数的负零表示,-5j等价于complex(0.0, -5.0),为了保证输出的字符串可以直接作为合法的复数字面量执行、得到和原对象完全一致的结果,Python会将正实部配合后面的减号显示为-0,最终输出为(-0-5j)。
你可以直接把输出的(-0-5j)作为代码执行,得到的对象和定义的t2完全相等。
内容的提问来源于stack exchange,提问作者Eduard Rostomyan
相关产品推荐
相关产品推荐

