Почему это странное поведение встроенного ’round’. (python 2.6)

#python #rounding

#python #округление

Вопрос:

Почему так?

 >>> round(2/3)
  

0.0

 >>> round(0.66666666666666666666666666666667)
  

1.0

 >>> round(2.0/3)
  

1.0

Ответ №1:

Это не странное поведение от 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 будет выполняться деление с плавающей запятой «propper»:

 >>> 2.0/3
0.6666666666666666
  

Комментарии:

1. Обратите внимание, что это верно для python 1.x и 2.x, но python >- 3 изменил это, поэтому 2/3 дает 0.66666666666666666 см. < python.org/dev/peps/pep-0238 >