Why does the division get rounded to an integer? [duplicate]
Почему деление округляется до целого числа?
Я пытался нормализовать набор чисел от -100 до 0 в диапазоне 10-100, и у меня возникли проблемы, только чтобы заметить, что даже при полном отсутствии переменных это не соответствует моим ожиданиям:
>>> (20-10) / (100-10) 0
Деление с плавающей точкой тоже не работает:
>>> float((20-10) / (100-10)) 0.0
Если любая сторона деления преобразуется к значению с плавающей точкой, это сработает:
>>> (20-10) / float((100-10)) 0.1111111111111111
Каждая сторона в первом примере вычисляется как int, что означает, что окончательный ответ будет преобразован в int . Поскольку 0.111 меньше .5, оно округляется до 0. На мой взгляд, это непрозрачно, но я думаю, что так оно и есть.
Каково объяснение?
Переведено автоматически
Ответ 1
Вы используете Python 2.x, где целочисленные деления будут усекаться вместо того, чтобы превращаться в число с плавающей запятой.
Если после приведения этого значения к значению с плавающей точкой округление уже будет выполнено, другими словами, целое число 0 всегда будет равно 0 с плавающей точкой.
Если вы используете значения с плавающей запятой по обе стороны от деления, то Python даст вам ожидаемый ответ.