将int转换为double Python

时间:2015-07-20 15:07:17

标签: python

我似乎无法在这个网站上找到答案,尽管看起来很常见。我正在尝试输出两个文件中行数的比率。

#Number of lines in each file
inputLines = sum(1 for line in open(current_file))
outputLines = sum(1 for line in open(output_file))

然后得到比率:

ratio = inputLines/outputLines

但即使我将其初始化为:

,这个比率似乎总是一个整数和一个整数
ratio = 1.0

感谢。

4 个答案:

答案 0 :(得分:25)

在python 2 中,两个整数除法的结果总是一个整数。要强制浮动除法,您需要在除法中使用至少一个浮点数

ratio = float(inputLines)/outputLines

小心不要ratio = float(inputLines/outputLines):虽然这会导致浮动,但是在执行整数除法后得到,因此结果将是“错误的”(如“你期望什么“)

在python 3 the integer division behavior was changed中,两个整数的除法导致浮点数。您也可以在python 2.7中使用此功能,方法是将from __future__ import division放在文件的乞讨中。

ratio = 1.0不起作用的原因是类型(在python中)是的属性,而不是变量 - 换句话说,变量don'有类型。

a= 1.0 # "a" is a float
a= 1   # "a" is now a integer

答案 1 :(得分:4)

您使用的是Python 2.x吗?

尝试使用

>>> from __future__ import division
>>> ratio = 2/5
0.4

从某个部门获得float

使用ratio = 1.0进行初始化并不起作用,因为ratio = inputLines/outputLines无论以前是什么,都要将变量重新分配给int。

答案 2 :(得分:2)

实际上,Python 2在分割整数时返回一个整数。您可以通过将此行为置于文件顶部来覆盖此行为,就像在Python 3中一样int / int = float

from __future__ import division

或者更好的是,停止使用Python 2:)

答案 3 :(得分:1)

您需要将其中一个术语转换为浮点值。明确地使用float(即ratio = float(a)/bratio=a/float(b))或隐式添加0.0ratio = (a+0.0)/b

如果使用Python 2,你可以from __future__ import division使除法不是整数,而是浮点数。