Преобразование 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:)