Преобразование int для двойного Python

Я не могу найти ответ на этот вопрос на этом сайте, хотя кажется, что он будет достаточно распространен. Я пытаюсь вывести double для отношения количества строк в двух файлах.

#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

Но отношение всегда кажется int и раундами, даже если я инициализирую его как:

ratio = 1.0

Спасибо.

Ответ 1

В python 2 результат деления двух целых чисел всегда является целым числом. Чтобы заставить float-деление, , вам нужно использовать по крайней мере одно float в разделе:

ratio = float(inputLines)/outputLines

Будьте осторожны, чтобы не делать ratio = float(inputLines/outputLines): хотя это приводит к поплавке, оно получается после выполнения целочисленного деления, поэтому результат будет "неправильным" (как в "не то, что вы ожидаете" )

В python 3, было изменено поведение целочисленного деления, а разделение двух целых чисел приводит к поплавке. Вы также можете использовать эту функцию в python 2.7, поместив from __future__ import division в попрошайничество ваших файлов.


Причина ratio = 1.0 не работает, так это то, что типы (в python) являются свойством значений, а не переменных - другими словами, переменные не имеют типов.

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

Ответ 2

Используете ли вы Python 2.x?

Попробуйте использовать

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

чтобы получить a float из деления.

Инициализация с помощью ratio = 1.0 не работает, потому что с ratio = inputLines/outputLines вы переназначаете переменную int, независимо от того, что было раньше.

Ответ 3

Вам нужно передать одно из условий в значение с плавающей запятой. Либо явно используя float (то есть ratio = float(a)/b или ratio=a/float(b)), либо неявно, добавив 0.0: ratio = (a+0.0)/b.

Если вы используете Python 2, вы можете from __future__ import division сделать деление не интегральным, а плавающим.

Ответ 4

Действительно, Python 2 возвращает целое число, когда вы делите целое число. Вы можете переопределить это поведение для работы, как в Python 3, где int / int = float, разместив это в верхней части файла:

from __future__ import division

Или еще лучше, просто прекратите использовать Python 2:)