Способы превращения дробного числа в целое в Python

Раздел: Строки -> Преобразование типов

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

Преобразование дробного числа в целое

Как отбросить дробную часть числа в Python?

Самый простой и быстрый способ - использовать функцию int(). Она отсекает дробную часть, усекая число к нулю (для положительных чисел - вниз, для отрицательных - вверх).

x = 3.14
y = int(x)
print(y)  # 3

neg = -2.7
print(int(neg))  # -2

изменить тип в python (изменить тип в python)

Проблема: При отрицательных числах int() не округляет в сторону минус бесконечности, а отбрасывает дробную часть, что может быть неожиданно. Для математического округления вниз используйте math.floor().

Цель использования: когда нужно просто отбросить дробную часть, не заботясь о направлении округления (например, при извлечении целой части показателя).

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

Функция round() выполняет математическое округление. В Python 3 используется банковское округление (round half to even), то есть 2.5 округляется до 2, а 3.5 до 4.

print(round(3.14))   # 3
print(round(3.5))    # 4 (в Python 3)
print(round(2.5))    # 2 (банковское округление)
print(round(-2.7))   # -3

Python int to str (преобразование int в строку в python)

Ошибка: ожидание арифметического округления «0.5 вверх». Банковское округление может давать неожиданный результат для чисел, точно равных .5. Для классического округления от половины используйте Decimal или собственную логику.

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

Функция math.floor() возвращает наибольшее целое, не превышающее исходное число. Для отрицательных чисел это число с меньшим значением (дальше от нуля).

import math
print(math.floor(3.14))   # 3
print(math.floor(-2.7))   # -3
print(math.floor(5.0))    # 5

Python bytes to string (преобразование байтов в строку в python)

Важно: floor() для целых чисел возвращает само число. Для отрицательных чисел результат может быть меньше ожидаемого, если нужно усечение к нулю.

Цель: вычисление количества целых элементов, гарантированное округление вниз при делении или работе с индексами.

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

Функция math.ceil() возвращает наименьшее целое, которое больше или равно исходному числу.

import math
print(math.ceil(3.14))   # 4
print(math.ceil(-2.7))   # -2
print(math.ceil(5.0))    # 5

как выводить в строку python (преобразование вывода в строку в python)

Ошибка: если ожидать, что для отрицательных чисел округление вверх будет от нуля, то ceil(-2.7) вернёт -2 (что математически верно), но может быть неожиданно.

Использование: определение минимального количества элементов, чтобы покрыть заданный объём (например, количество страниц для вывода товаров).

Как преобразовать строку с дробным числом в целое?

Сначала строку необходимо превратить в float с помощью float(), а затем применить один из методов выше. Нельзя напрямую вызвать int() от строки, содержащей точку, - возникнет ошибка ValueError.

s = "3.14"
f = float(s)  # 3.14
result = int(f)  # 3
print(result)

# Неправильно:
# int("3.14")  # ValueError
Типичная ошибка: попытка преобразовать строку с дробным разделителем напрямую в int. Сначала обязателен переход через float, иначе - исключение.

Случаи использования: обработка пользовательского ввода, чтение данных из файла или API, где числа хранятся в текстовом формате.

- преобразовать тип данных python (преобразование типа данных в python)
- Python целое в строку (преобразование целого числа в строку)
- Python string number (строковое представление числа в python)

Ниже приведены расширенные примеры преобразования дробных чисел в целые с комментариями и выводом результатов.

Пример
# Пример 1: Различие между int() и round() для положительных и отрицательных чисел
import math

numbers = [3.14, 3.5, 2.5, -2.7, -0.5, 0.0]

print("Число | int() | round() | floor() | ceil()")
for n in numbers:
    print(f"{n:5} | {int(n):5} | {round(n):7} | {math.floor(n):5} | {math.ceil(n):5}")

# Вывод:
# Число | int() | round() | floor() | ceil()
#  3.14 |     3 |       3 |      3 |      4
#   3.5 |     3 |       4 |      3 |      4
#   2.5 |     2 |       2 |      2 |      3
#  -2.7 |    -2 |      -3 |     -3 |     -2
#  -0.5 |     0 |       0 |     -1 |      0
#   0.0 |     0 |       0 |      0 |      0
Число | int() | round() | floor() | ceil()
 3.14 |     3 |       3 |      3 |      4
  3.5 |     3 |       4 |      3 |      4
  2.5 |     2 |       2 |      2 |      3
 -2.7 |    -2 |      -3 |     -3 |     -2
 -0.5 |     0 |       0 |     -1 |      0
  0.0 |     0 |       0 |      0 |      0
Пример
# Пример 2: Преобразование строки с дробным числом, включая обработку ошибок

def str_to_int(s, method='trunc'):
    """Преобразует строку с дробным числом в целое, используя указанный метод."""
    try:
        f = float(s)
    except ValueError:
        raise ValueError(f"Невозможно преобразовать строку '{s}' в число")
    
    if method == 'trunc':
        return int(f)
    elif method == 'round':
        return round(f)
    elif method == 'floor':
        import math
        return math.floor(f)
    elif method == 'ceil':
        import math
        return math.ceil(f)
    else:
        raise ValueError(f"Неизвестный метод: {method}")

# Тесты
inputs = ["3.14", "2.5", "-1.9", "5.0", "abc"]
for s in inputs:
    try:
        print(f"'{s}' -> trunc:{str_to_int(s, 'trunc')}, round:{str_to_int(s, 'round')}, floor:{str_to_int(s, 'floor')}, ceil:{str_to_int(s, 'ceil')}")
    except Exception as e:
        print(f"'{s}' -> Ошибка: {e}")
'3.14' -> trunc:3, round:3, floor:3, ceil:4
'2.5' -> trunc:2, round:2, floor:2, ceil:3
'-1.9' -> trunc:-1, round:-2, floor:-2, ceil:-1
'5.0' -> trunc:5, round:5, floor:5, ceil:5
'abc' -> Ошибка: Невозможно преобразовать строку 'abc' в число
Пример
# Пример 3: Банковское округление (round half to even) против арифметического
# Реализация классического округления от половины вверх
def round_classic(x):
    # Округление от нуля для .5
    import math
    if x - math.floor(x) == 0.5:
        return math.floor(x) + 1 if x > 0 else math.ceil(x) - 1
    return round(x)

values = [2.5, 3.5, -2.5, -3.5]
for v in values:
    print(f"{v}: round={round(v)}, classic={round_classic(v)}")
2.5: round=2, classic=3
3.5: round=4, classic=4
-2.5: round=-2, classic=-3
-3.5: round=-4, classic=-4
Пример
# Пример 4: Использование Decimal для точного округления без банковских эффектов
from decimal import Decimal, ROUND_HALF_UP

def round_decimal(x, precision=0):
    d = Decimal(str(x))
    return int(d.quantize(Decimal('1e{}'.format(precision)), rounding=ROUND_HALF_UP))

print(round_decimal(2.5))   # 3
print(round_decimal(3.5))   # 4
print(round_decimal(-2.5))  # -3 (округляет от нуля) – зависит от реализации Decimal
3
4
-3

Преобразование дробного числа в целое в Python - comments

En
дробное число в целое python (python)