无法在 python 3 上将复杂转换为浮点数

Posted

技术标签:

【中文标题】无法在 python 3 上将复杂转换为浮点数【英文标题】:Can't convert complex to float on python 3 【发布时间】:2018-06-20 09:12:17 【问题描述】:

我为uri在线法官编写了这段代码(问题号1036)......这是一个Bhaskara公式......

import cmath
A,B,C=input().split()
A = float(A)
B = float(B)
C = float(C)
D = (B*B)-(4*A*C)
if((D== -D)|(A==0)):
    print("Impossivel calcular")

else:
    T = cmath.sqrt(D)
    x1 = (-B+T)/(2*A)
    x2 = (-B-T)/(2*A)
    print("R1 = %.5f" %x1)
    print("R2 = %.5f" %x2)

但是当我提交这个程序时...发生了运行时错误...

Traceback (most recent call last): File "Main.py", line 14, in
    print("R1 = %.5f" %x1)
TypeError: can't convert complex to float
Command exited with non-zero status (1)

请帮我解决这个问题。

【问题讨论】:

Formatting Complex Numbers的可能重复 【参考方案1】:

问题只是您的格式字符串用于floats 而不是复数。这样的事情会起作用:

print(':#.3 '.format(5.1234 + 4.123455j))
# (5.12+4.12j) 

或更明确地说:

print('0.real:.3f + 0.imag:.3fi'.format(5.123456789 + 4.1234556547643j))
# 5.123 + 4.123i

您可能想看看format specification mini language。

# 作为格式说明符不适用于旧式% 格式...

那么您的代码还有更多问题:

if((D== -D)|(A==0)):

为什么不if D==0:?为此,使用cmath.isclose 可能会更好。

然后:| 是一个按位运算符,就像您使用它一样;你可能想用or替换它。

您的if 语句可能如下所示:

if D == 0 or A == 0:
# or maybe
# if D.isclose(0) or A.isclose():

【讨论】:

【参考方案2】:

使用从cmath导入的sqrt的问题是它输出了一个complex数字,不能转换成float。如果您从正数计算sqrt,请使用math 库(见下文)。

>>> from cmath import sqrt
>>> sqrt(2)
(1.4142135623730951+0j)
>>> from math import sqrt
>>> sqrt(2)
1.4142135623730951

【讨论】:

以上是关于无法在 python 3 上将复杂转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark - ValueError:无法将字符串转换为浮点数/浮点()的无效文字

在汇编中将无符号字符转换为浮点数(为浮点向量计算做准备)

如何在 Java 中将整数转换为浮点数?

无法在python中将字符串转换为浮点数

Python:ValueError:无法将字符串转换为浮点数:'0'

无法将数组转换为浮点数python