#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 >