Деление Python - PullRequest
       32

Деление Python

126 голосов
/ 02 июня 2010

Я пытался нормализовать набор чисел от -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 меньше 0,5, оно округляется до 0. На мой взгляд, оно не прозрачно, но, думаю, так оно и есть.

Какое объяснение?

Ответы [ 12 ]

0 голосов
/ 02 июня 2010

Вы играете на плаву после того, как разделение уже произошло во втором примере. Попробуйте это:

float(20-10) / float(100-10)
0 голосов
/ 02 июня 2010

В любом случае, это целочисленное деление. 10/90 = 0. Во втором случае вы просто разыгрываете 0 в число с плавающей точкой.

Попробуйте привести один из операндов "/" к числу с плавающей точкой:

float(20-10) / (100-10)
...