Как округлить число в Python (функция round() и десятичное число)

Узнайте, как округлять числа с плавающей запятой в Python. Познакомьтесь с округлением Banker, настраиваемой десятичной точностью и форматированием чисел с плавающей запятой для отображения.

Попробуйте это решение в редакторе

Обзор

Арифметика с плавающей запятой в компьютерах иногда может приводить к неожиданным проблемам с точностью из-за того, как двоичные системы хранят десятичные числа (например, `0,1 + 0,2` оценивается как `0,300000000000000004`). При предоставлении чисел пользователям или подготовке показателей округление чисел является распространенным требованием. Python предоставляет несколько способов добиться этого.

Основным инструментом является встроенная функция round(number, ndigits). Требуется число и необязательный счетчик точности. Если `ndigits` опущено, оно округляется до ближайшего целого числа. Если указано `ndigits`, оно округляется до указанного количества десятичных знаков.

Ключевым свойством функции Python round() является то, что она использует «банковское округление» (округление до половины до четного). Когда число находится ровно посередине между двумя целыми числами (например, `2,5` или `3,5`), Python округляет до ближайшего *чётного* числа. Это означает, что round(2.5) равен 2, а round(3.5) равен 4. Несмотря на то, что это математически справедливо для больших наборов данных, чтобы предотвратить смещение вверх, для точных финансовых расчетов вам следует использовать инструменты квантования «десятичного» модуля.

Код и вывод выполнения

Этот скрипт демонстрирует округление чисел с плавающей запятой с использованием встроенной функции округления, примеров округления Banker и модуля decimal.

from decimal import Decimal, ROUND_HALF_UP

val = 3.14159

# 1. Round to nearest integer
print("Nearest Integer:", round(val))

# 2. Round to 2 decimal places
print("Two decimals:", round(val, 2))

# 3. Banker's Rounding demonstration (rounds to nearest even)
print("round(2.5):", round(2.5)) # Nearest even is 2
print("round(3.5):", round(3.5)) # Nearest even is 4

# 4. Math rounding up (Traditional rounding) using decimal module
amount = Decimal("2.5")
rounded_up = amount.quantize(Decimal("1"), rounding=ROUND_HALF_UP)
print("Decimal ROUND_HALF_UP (2.5):", rounded_up)
Терминальный выход
Nearest Integer: 3
Two decimals: 3.14
round(2.5): 2
round(3.5): 4
Decimal ROUND_HALF_UP (2.5): 3

Пошаговая реализация

  • Вызовите встроенную функцию round(number), чтобы округлить число с плавающей запятой до ближайшего целого числа.
  • Передайте второй аргумент (например, round(num, 2)), чтобы указать количество сохраняемых десятичных знаков.
  • Используйте десятичный модуль с ROUND_HALF_UP для строгих вычислений финансового округления.

Часто задаваемые вопросы

Почему round(2.5) возвращает 2 вместо 3 в Python?

Python использует округление Банкера, которое округляет половину чисел до ближайшего четного целого числа. Это уменьшает статистическую погрешность (округление половинных чисел в большую сторону всегда вызывает небольшое смещение вверх в больших наборах данных).

Как округлить число всегда в большую или всегда в меньшую сторону?

Импортируйте математический модуль и используйте math.ceil(x) для округления до следующего целого числа или math.floor(x) для округления до предыдущего целого числа.

Связанные темы

Рекомендуемые ресурсы Python

Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.