Как правильно получить целую часть числа в Python?

Раздел: Основы Python -> Арифметика

Целая часть числа в Python: обзор способов

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

Наиболее эффективный способ получения целой части числа (floor) - использование оператора целочисленного деления // с делителем 1. Для любого числа x результат x // 1 даёт целую часть, округлённую вниз.

x = 3.14
result = x // 1
print(result)  # 3.0

найти сумму введенных чисел python (нахождение суммы введенных чисел в python)

3.0

факториал числа n python (вычисление факториала числа n в python)

Для отрицательных чисел:

x = -3.14
result = x // 1
print(result)  # -4.0

арифметические действия python (арифметические действия в python)

-4.0

Python целая часть (целая часть числа)

Если требуется целое число (int), результат можно преобразовать: int(x // 1). Однако следует помнить, что для очень больших чисел с плавающей точкой может произойти потеря точности из-за ограниченной мантиссы.

Типичная ошибка: путаница между // и обычным делением /. Оператор // всегда возвращает целую часть от деления, но не для остатка.

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

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

x = -3.14
result = int(x)
print(result)  # -3

как сложить числа в python (сложение чисел в python)

-3

Python возвести число в квадрат (возведение числа в квадрат в python)

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

Как получить математическую целую часть (антье) числа с плавающей точкой?

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

import math
x = -3.14
result = math.floor(x)
print(result)  # -4

Python отрицательное число в положительное (преобразование отрицательного числа в положительное в python)

-4

Типичная ошибка: забыть импортировать модуль math. Также floor() возвращает int, но для очень больших чисел может вернуть float? Нет, возвращает int. Однако если передать Decimal, нужно использовать метод Decimal().to_integral_value(rounding=ROUND_FLOOR).

Как работает целочисленное деление // для разных типов?

Оператор // выполняет floor-деление: результат округляется вниз. Для int и float работает по-разному: для int возвращает int, для float возвращает float. Если оба операнда int, результат int; если хотя бы один float, результат float.

print(10 // 3)     # 3
print(10.0 // 3)   # 3.0
print(-10 // 3)    # -4
print(-10.0 // 3)  # -4.0
3
3.0
-4
-4.0

Типичная ошибка: считать, что // эквивалентен int(a/b). Для отрицательных чисел это не так из-за округления вниз.

Как получить целую часть числа Decimal?

Для чисел типа Decimal из модуля decimal можно использовать метод to_integral_value() с указанием режима округления. По умолчанию используется ROUND_HALF_EVEN, но для получения floor нужно указать ROUND_FLOOR.

from decimal import Decimal, ROUND_FLOOR
x = Decimal('-3.14')
result = x.to_integral_value(rounding=ROUND_FLOOR)
print(result)  # -4
-4

Типичная ошибка: забыть указать rounding, из-за чего результат может быть -3 (по умолчанию ROUND_HALF_EVEN).

Расширенные примеры и сравнение методов

Пример
import math

numbers = [3.14, -3.14, 5.0, -5.0, 1000000000.123, -1000000000.123]

print("Число | int() | // | floor()")
for n in numbers:
    print(f"{n:15} | {int(n):5} | {n//1:5} | {math.floor(n):5}")
Число | int() | // | floor()
          3.14 |     3 |   3.0 |     3
         -3.14 |    -3 |  -4.0 |    -4
           5.0 |     5 |   5.0 |     5
          -5.0 |    -5 |  -5.0 |    -5
 1000000000.123 | 1000000000 | 1000000000.0 | 1000000000
-1000000000.123 | -1000000000 | -1000000001.0 | -1000000001
Пример
from decimal import Decimal, ROUND_FLOOR, ROUND_DOWN

prices = [Decimal('19.99'), Decimal('-19.99'), Decimal('0.001'), Decimal('-0.001')]

for p in prices:
    floor_val = p.to_integral_value(rounding=ROUND_FLOOR)
    trunc_val = p.to_integral_value(rounding=ROUND_DOWN)
    print(f"{p} -> floor: {floor_val}, trunc: {trunc_val}")
19.99 -> floor: 19, trunc: 19
-19.99 -> floor: -20, trunc: -19
0.001 -> floor: 0, trunc: 0
-0.001 -> floor: -1, trunc: 0
Пример
big_float = 1e30 + 1.0
print("int(big_float):", int(big_float))
print("big_float // 1:", big_float // 1)
import math
print("math.floor(big_float):", math.floor(big_float))
int(big_float): 1000000000000000019884624838656
big_float // 1: 1e+30
math.floor(big_float): 1000000000000000019884624838656

Обратите внимание, что из-за ограниченной точности float результат может отличаться от ожидаемого. Для точных вычислений используйте Decimal.

Целая часть числа - comments

En
Python целая часть (python)