HOWTO · Python

Python에서 부동 소수점 숫자를 정수로 변환

이 기사에서는 Python에서 부동 소수점 숫자를 정수로 변환하는 방법을 소개합니다.

이 페이지의 내용

Python에서 부동 소수점 숫자를 정수로 바꾸려면 소수 부분을 0 방향으로 버리는 내장 함수 int()를 사용하세요. 다른 규칙이 필요하다면 math.ceil()은 값보다 크거나 같은 가장 작은 정수로 올림하고, math.floor()는 값보다 작거나 같은 가장 큰 정수로 내림합니다. 표준 라이브러리에는 0 방향으로 버리는 math.trunc()도 있습니다. 음수에서는 이 함수들의 결과가 서로 다를 수 있으므로 계산 목적에 맞는 함수를 선택하세요.

int()로 부동 소수점 숫자를 정수로 변환하기

다음 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

number = 25.49
print(int(number))
25

양수인 소수 값에 int()를 적용하면 소수 부분이 제거됩니다. 음수도 0 방향으로 처리되므로 int(-1.5)는 -2가 아니라 -1입니다. 이는 가장 가까운 정수로 반올림하는 것이 아닙니다. 가장 가까운 값으로 반올림해야 한다면 int()가 그렇게 해 줄 것이라고 가정하지 말고 반올림 연산을 사용하세요.

int()에는 부동 소수점 숫자와 정수뿐 아니라 int("25")처럼 정수를 나타내는 텍스트도 전달할 수 있습니다. 소수점이 포함된 "25.49" 같은 텍스트는 정수 형식의 문자열이 아니므로 int()에 바로 전달할 수 없습니다. 소수점이 있는 텍스트를 먼저 부동 소수점 숫자로 변환한 다음, 0 방향으로 버리려는 경우 그 값을 정수로 변환하세요. 숫자형 부동 소수점 값을 전달하는 것과 문자열을 전달하는 것은 서로 다른 변환이라는 점에 유의하세요.

부동 소수점 리터럴은 작성한 십진수 표기와 다르게 표현될 수도 있습니다. 예를 들어 Python은 1.9999999999999999를 2.0으로 표현할 수 있습니다. 이미 그렇게 표현된 값에 int()를 적용하면 2.0에 해당하는 정수가 반환됩니다. 숫자 9가 16개 이상일 때 적용되는 특별한 int() 규칙은 없습니다. 변환은 파싱이 끝난 뒤 존재하는 부동 소수점 값을 대상으로 하므로, 정수에 가까운 결과에는 0 방향 절삭뿐 아니라 부동 소수점 표현 방식도 영향을 줄 수 있습니다.

math로 0 방향 절삭, 올림, 내림 선택하기

원하는 변환 규칙을 명확히 지정하려면 math 모듈을 사용하세요. math.trunc()는 0 방향으로 절삭하며, 부동 소수점 값에 대해서는 int()와 같은 결과를 냅니다. math.ceil()은 값보다 크거나 같은 가장 작은 정수를 반환하고, math.floor()는 값보다 작거나 같은 가장 큰 정수를 반환합니다. 음수에서는 차이가 분명합니다. -1.5를 0 방향으로 절삭하면 -1, 내림하면 -2, 올림하면 -1입니다. 양수에서는 0 방향 절삭과 내림이 같은 정수로 내려가고, 올림은 더 큰 정수로 올라갑니다.

다음 독립 실행형 예제는 양수와 음수에 세 표준 라이브러리 함수를 모두 적용해 비교합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import math

for number in (1.5, -1.5):
    print(number, math.trunc(number), math.ceil(number), math.floor(number))
1.5 1 2 1
-1.5 -1 -1 -2

소수 부분을 0 방향으로 버리려면 int() 또는 math.trunc()를, 결과가 입력값보다 작아지면 안 된다면 math.ceil()을, 결과가 입력값보다 커지면 안 된다면 math.floor()를 사용하세요. 예를 들어 측정량을 정수 단위로 바꿀 때는 완전히 채워진 단위만 남길지, 필요한 양을 충족하도록 항상 넉넉히 할당할지, 측정량에 온전히 들어가는 단위만 셀지 먼저 결정해야 합니다. 코드에 변환 규칙을 명시하면 결과를 검토하기 쉽고 의도하지 않은 방향으로 값이 바뀌는 일을 피할 수 있습니다.

일반적인 유한 숫자 입력에서 이 함수들은 모두 Python 정수를 반환합니다. 소수 정보는 보존되지 않습니다. 이후 계산에 그 정밀도가 필요하다면 변환한 정수와 함께 원래 부동 소수점 값도 보관하세요. 정확한 십진 산술이 필요한 수량이라면 변환 전에 십진수 표현이 더 적합한지 검토하세요. 이미 근사된 부동 소수점 값을 변환해도 표현 과정에서 손실된 십진 자릿수를 복구할 수는 없습니다.