【问题标题】:TypeError: a float is required - PythonTypeError:需要浮点数 - Python
【发布时间】:2015-06-28 02:50:56
【问题描述】:

我目前正在通过 Python 3.x 创建一个三角计算器。在我的一个函数中,我为直角三角形的未知角度创建了一个值 我通过为它分配函数'ANGLE_B'来定义'angle_b'。这是代码树供参考:

def create():
    global side_a
    side_a = format(random.uniform(1,100),'.0f')
    global side_b
    side_b = format(random.uniform(1,100),'.0f')
    global angle_a
    angle_a = format(random.uniform(1,180),',.3f')
    global angle_b
    angle_b = ANGLE_B()

def ANGLE_B():
    ang = format(math.asin(side_b*(math.sin(angle_a)/side_a)),'.3f')
    return ang

我尝试了多种将ANGLE_B() 块中的ang 转换为浮点数的组合,例如ang = float(ang),但我没有运气。任何人都可以帮忙吗?当我在 CMD 中运行它时,我不断收到TypeError: a float is required

【问题讨论】:

  • 我没有看到ANGLE_B() 中声明的变量side_bangle_aside_a .. 即使是global ?
  • create() 函数中,side_a,side_b,angle_aangle_b 都被声明为全局并已定义。只有angle_b 变量由ANGLE_B() 函数定义,因此在这种情况下您的愿景非常值得怀疑。
  • 我的错......真的......我的视力有问题......:D
  • 我想知道为什么您将变量创建为字符串 - 而不是将它们创建为浮点数,然后仅在需要输出时转换为字符串。
  • 这是个好问题。我向下转换的原因是因为我希望变量的值是一个四舍五入到最接近千分之一的常数。输出不是我想要的,而是像存储的实际变量一样

标签: python floating-point typeerror required


【解决方案1】:

您将字符串变量传递给 math.sin 和 math.asin,这会导致类型错误。您可以通过转换为浮点数来修复:

ang = format(math.asin(float(side_b)* (math.sin(float(angle_a))/float(side_a))),'.3f')

您也可以将所有这些变量存储为浮点数。

【讨论】:

  • 嗨@samgak,我也试过这个,因为我需要使用ctypes,我有同样的错误,我的代码:x=0x=float(x)fp = c_float(x)fp = c_float(fp)谢谢你的帮助!
  • @AlexanderDeLeonVI 问题是最后一条语句fp = c_float(fp)。您需要将浮点数传递给 c_float(),但由于fp = c_float(x),fp 已经是 c_float。把最后一条语句去掉就好了,没必要。
猜你喜欢
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
相关资源
最近更新 更多