Почему это странное поведение 'round' встроено. (Python 2.6) - PullRequest
1 голос
/ 23 мая 2011

Почему так?

>>> round(2/3)

0.0

>>> round(0.66666666666666666666666666666667)

1.0

>>> round(2.0/3)

1.0

1 Ответ

16 голосов
/ 23 мая 2011

Это не странное поведение из round():

Попробуйте:

>>> 2/3
0

Использование / с двумя целочисленными значениями приведет к целочисленному делению.Таким образом, аргумент до round() равен уже 0, что делает round() возвращаемым 0.

Обновление: , как @Mark отметил вкомментарий, это поведение изменилось в Python 3 : 2/3 будет выполнять деление с плавающей запятой, как 2.0/3 делает в Python 2. 2//3 может использоваться для получения целочисленного поведения деления в обеих версиях).

Ваш последний пример работает, потому что 2.0 не является целым числом, поэтому 2.0/3 выполнит «простое» деление с плавающей запятой:

>>> 2.0/3
0.6666666666666666
...