round() возвращает другой результат в зависимости от количества аргументов

При использовании функции round() я заметил, что получаю два разных результата в зависимости от того, не явным образом выбираю число десятичных знаков для включения или выбора числа 0.

x = 4.1
print(round(x))
print(round(x, 0))

Он печатает следующее:

4
4.0

В чем разница?

Ответ 1

Функция round возвращает целое число, если второй аргумент не указан, иначе возвращаемое значение имеет тот же тип, что и первый аргумент:

>>> help(round)
Help on built-in function round in module builtins:

round(number, ndigits=None)
    Round a number to a given precision in decimal digits.

    The return value is an integer if ndigits is omitted or None. Otherwise
    the return value has the same type as the number. ndigits may be negative.

Поэтому, если переданные аргументы являются целыми и нулевыми, возвращаемое значение будет целым типом:

>>> round(100, 0)
100
>>> round(100, 1)
100

Ради полноты:

Отрицательные числа используются для округления до десятичной точки

>>> round(124638, -2)
124600
>>> round(15432.346, -2)
15400.0

Ответ 2

Когда вы укажете число десятичных знаков, даже если это число равно 0, вы вызываете версию метода, которая возвращает float. Так что это нормально, что вы получаете этот результат.

Ответ 3

Функция round() в Python имеет два параметра:

  1. номер - число, подлежащее округлению
  2. количество цифр (необязательно) - количество цифр, до которых должно быть округлено заданное число.

Всякий раз, когда вы используете второй параметр, Python автоматически преобразует тип данных возвращаемого значения в float. Если вы не используете второй необязательный параметр, тогда тип данных останется целым.

Следовательно, это 4.0, когда параметр передан, а 4 - нет.