На этом шаге мы рассмотрим особенности выполнения этой операции.
Вы хотите округлить число с плавающей точкой до заданного количества знаков после точки.
Для простого округления используйте встроенную функцию round(value, ndigits). Например:
>>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 >>> round(-1.27, 1) -1.3 >>> round(1.25361, 3) 1.254 >>>
Когда значение попадает точно между двух возможных выборов для округления, эта функция будет округлять к ближайшему четному значению. То есть 1.5 или 2.5 будут округлены до 2.
Количество знаков, которое передается функции round(), может быть отрицательным. В этом случае округление будет идти до десятков, сотен, тысяч и т. д. Например:
>>> a = 1627731 >>> round(a, -1) 1627730 >>> round(a, -2) 1627700 >>> round(a, -3) 1628000 >>>
Не перепутайте округление с форматированием значения для вывода. Если вы хотите просто вывести число с некоторым определенным количеством знаков после точки, обычно вам не требуется round(). Вместо этого просто задайте при форматировании, сколько знаков выводить. Пример:
>>> x = 1.23456 >>> format(x, '0.2f') '1.23' >>> format(x, '0.3f') '1.235' >>> 'value is {:0.3f}'.format(x) 'value is 1.235' >>>
Сопротивляйтесь желанию округлить числа с плавающей точкой, чтобы исправить проблемы с точностью вычислений. Например, вы можете подумывать поступить так:
>>> a = 2.1 >>> b = 4.2 >>> c = a + b >>> c 6.300000000000001 >>> c = round(c, 2) # "Исправленный" результат (???) >>> c 6.3 >>>
Для большинства программ, работающих с числами с плавающей точкой, просто не нужно (и не рекомендуется) этого делать. Хотя есть незначительные ошибки в вычислениях, поведение этих ошибок понятно и терпимо. Если необходимо избежать таких ошибок (например, это может быть важно для финансовых приложений), попробуйте модуль decimal, который обсуждается в следующем рецепте.
На следующем шаге мы рассмотрим выполнение точных вычислений с десятичными дробями.