Python:Python中的float(var)转换不起作用



这是我的代码:

def pmi(w1,w2):
     x = float(1)
     x = (bg_fdist[(w1, w2)])/(f_brown[(w1)]*f_brown[(w2)])
     print x

输入的值将为:

>>> bg_fdist[('of','the')]
9781
>>> f_brown[('of')]
36412
>>> f_brown[('the')]
6997`

所以我希望我的 x 非常小,介于 0 和 1 之间。

但我得到的回报是:

>>>> pmi('of','the')
0

我认为可能是这样,因为 X 仍然作为整数处理? 这是为什么呢? 谁能指出我如何获得预期的结果?

问候!

您声明为 float(1) 的 x 与第二行中的计算结果没有任何关系:它只是被扔掉并替换为那里的结果。相反,您需要将该计算的某些元素显式地设置为浮点数。

通过拆分整个事情可以更清晰,如下所示:

def pmi(w1,w2):
    first = float(bg_fdist[(w1, w2)])
    second = float(f_brown[(w1)]*f_brown[(w2)])
    result = first/second
    return result

如果你这样做

>>> x = float(1)
>>> x
1.0
>>> type(x)
<type 'float'>

x 确实是一个浮点数。但是,如果在你用 int 实例化它之后,它就不再是浮点数了:

>>> x = 2
>>> x
2
>>> type(x)
<type 'int'>

在进行除法时,您使用的是整数,因此:

>>> x = 2/4
>>> x
0
>>> type(x)
<type 'int'>

您仍然有一个整数。相反,您可以在等式中的变量上使用浮点数:

>>> x = float(2)/4
>>> x
0.5

您也可以使用 from __future__ import division .

当前除法 (/) 运算符的含义不明确 数值参数:它返回数学的底线 如果参数是整数或长整型,则除法的结果,但它 返回除法结果的合理近似值,如果 参数是浮点数或复杂参数。

参见:PEP 238

最新更新