본문 바로가기
지식을 알아가는 시간 지식을 알아가는 시간

파이썬 정수(int)와 실수(float)의 차이점 및 계산 시 주의할 점

읽는 시간 약 5분

파이썬 정수와 실수는 둘 다 숫자인데도 따로 구분되어 있다는 것을 계산을 하다 보면 알게 됩니다. 이 둘은 겉보기엔 비슷하지만 계산 결과가 의외로 달라질 때가 있습니다. 이 글에서는 정수와 실수가 무엇이 다른지, 계산할 때 어떤 점을 조심해야 하는지 직접 실행해 보며 정리합니다.

정수와 실수란

정수(int)는 1, 0, -5처럼 소수점이 없는 숫자입니다. 실수(float)는 3.14, 0.5처럼 소수점이 있는 숫자입니다. 파이썬은 숫자를 어떻게 적었는지에 따라 자동으로 구분합니다. 10은 정수이지만 10.0은 소수점이 붙어 있어서 값은 같아 보여도 실수입니다.

type()으로 종류 확인하기

type()을 쓰면 값이 정수인지 실수인지 확인할 수 있습니다.

print(type(10))
print(type(3.14))
print(type(10.0))

실행 결과는 아래와 같습니다. int는 정수, float는 실수를 뜻합니다.

<class 'int'>
<class 'float'>
<class 'float'>

나눗셈의 결과는 항상 실수

파이썬에서 나눗셈 기호 /를 쓰면 결과는 항상 실수가 됩니다. 딱 나누어떨어지는 경우에도 마찬가지입니다.

print(7 / 2)
print(10 / 2)
3.5
5.0

10을 2로 나눈 결과는 5가 아니라 5.0입니다. 소수점이 붙은 실수라는 점을 기억해 두세요. 몫만 정수로 구하고 싶다면 //를, 나머지를 구하고 싶다면 %를 씁니다.

print(7 // 2)
print(7 % 2)
3
1

정수와 실수를 섞어서 계산하면

정수와 실수를 섞어서 계산하면 결과는 실수가 됩니다.

print(1 + 2.5)
print(3 * 2.0)
3.5
6.0

0.1 + 0.2가 0.3이 아닌 이유

실수 계산에서 가장 놀라운 점은 아래 결과입니다.

print(0.1 + 0.2)
0.30000000000000004

0.3이 나올 것 같지만 뒤에 아주 작은 숫자가 붙어서 나옵니다. 파이썬의 오류가 아닙니다. 컴퓨터는 숫자를 2진수로 저장하는데, 0.1 같은 소수는 2진수로 정확히 나타낼 수 없어서 아주 작은 오차가 생깁니다. 그래서 실수끼리 같은지 비교할 때도 조심해야 합니다.

print(0.1 + 0.2 == 0.3)
False

이런 오차가 신경 쓰일 때는 round()로 원하는 자리까지 반올림해서 사용합니다. 아래는 소수점 둘째 자리까지 반올림하는 예입니다.

print(round(0.1 + 0.2, 2))
0.3

돈 계산처럼 오차가 있으면 안 되는 경우에는 금액을 원 단위 정수로 계산하거나, 파이썬에 기본으로 들어 있는 decimal 모듈을 사용하는 방법이 있습니다.

실수를 정수로 바꾸면 소수점이 버려진다

int()를 쓰면 실수를 정수로 바꿀 수 있습니다. 이때 반올림이 아니라 소수점 아래를 그냥 버립니다.

print(int(3.9))
3

3.9가 4가 아니라 3이 됩니다. 반올림하고 싶다면 int()가 아니라 round()를 써야 합니다.

처음 하는 분들이 자주 하는 실수

나눗셈 결과를 정수라고 생각하고 리스트의 번호 자리에 쓰는 경우가 있습니다. 나눗셈 /의 결과는 실수라서 리스트 번호로 쓰면 에러가 납니다. 이럴 때는 //를 사용해 정수로 된 몫을 얻으면 됩니다. 또 실수끼리 ==로 같은지 비교하면 의도와 다른 결과가 나올 수 있으니 주의하세요.

마무리

오늘은 정수와 실수의 차이, 나눗셈의 결과가 항상 실수라는 점, 0.1 + 0.2가 0.3이 아닌 이유, 그리고 int()가 소수점을 버린다는 점을 알아봤습니다. 숫자라고 모두 같은 숫자가 아니라는 점만 기억해도 계산 실수를 많이 줄일 수 있습니다.

저도 이 글을 쓰면서 위의 예시를 터미널에서 직접 실행해 봤습니다. 특히 0.1 + 0.2의 결과가 0.3이 아니라 0.30000000000000004로 나오는 것을 눈으로 확인하니, 실수 계산에서 오차를 조심해야 한다는 말이 훨씬 와닿았습니다.

여백
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.