파이썬에서 변수와 문자열을 다루는 법을 배웠다면, 이제 가장 기본적인 데이터 단위인 숫자(Number) 데이터 타입과 이를 계산하는 연산자(Operator)를 다룰 차례입니다.

프로그래밍에서 숫자는 단순히 사칙연산을 하는 것에 그치지 않고, 반복문의 횟수를 세거나 조건문의 판단 기준을 만드는 등 프로그램의 논리를 구성하는 가장 핵심적인 요소입니다. 하지만 비전공자 입문자들이 숫자를 다룰 때 "당연히 0.3이 나와야 하는데 왜 이상한 숫자가 나오지?"라며 당황하는 순간이 반드시 찾아옵니다. 오늘은 파이썬의 정수와 실수 차이점, 기본 연산자 활용법, 그리고 실수 계산 시 겪게 되는 부동소수점 오차 문제와 해결책을 깔끔하게 정리해 드립니다.

1. 정수(int)와 실수(float)의 차이점

파이썬에서 숫자는 크게 두 가지 타입으로 나뉩니다.

  • 정수(int, Integer): 소수점이 없는 숫자입니다. (10, -5, 0)

  • 실수(float, Floating-point): 소수점이 포함된 숫자입니다. (10.5, -3.14, 0.0)

파이썬은 변수에 숫자를 입력할 때 소수점 존재 여부를 보고 알아서 타입을 정해줍니다. x = 10이라고 쓰면 정수로 인식하고, y = 10.0이라고 쓰면 실수로 인식합니다.

단순해 보이지만 두 타입을 구분하는 것이 중요한 이유는 메모리 처리 방식과 계산 결과의 형변환 때문입니다. 특히 정수끼리 나누기를 진행하더라도 결과는 무조건 실수(float) 형태로 변환된다는 점을 기억해야 합니다.


2. 파이썬의 7가지 기본 산술 연산자

파이썬에는 우리가 흔히 아는 사칙연산 외에도 프로그래밍에서 매우 자주 쓰이는 특수 연산자들이 있습니다.

  1. 더하기 (+): 10 + 5 -> 15

  2. 빼기 (-): 10 - 5 -> 5

  3. 곱하기 (*): 10 * 5 -> 50

  4. 나누기 (/): 10 / 5 -> 2.0 (결과는 항상 실수)

  5. 몫 구하기 (//): 10 // 3 -> 3 (나눈 결과에서 소수점 이하를 버리고 정수 몫만 남김)

  6. 나머지 구하기 (%): 10 % 3 -> 1 (나누고 남은 나머지 값을 구함)

  7. 거듭제곱 (**): 2 ** 3 -> 8 ($2^3$)

특히 나머지 연산자(%)와 몫 연산자(//)는 실무나 알고리즘에서 굉장히 자주 쓰입니다. 예를 들어 어떤 숫자가 짝수인지 홀수인지 판별할 때 num % 2의 결과가 0인지 1인지 확인하거나, 100초를 "1분 40초"로 변환할 때 몫(//)과 나머지(%)를 활용합니다.


3. 실수 연산의 함정: 부동소수점 오차 (0.1 + 0.2 != 0.3)

파이썬을 처음 공부할 때 가장 신기하면서도 당황스러운 현상이 있습니다. 파이썬 대화형 터미널에서 0.1 + 0.2를 입력해 보세요.

당연히 0.3이 나올 것 같지만, 파이썬은 아래와 같은 결과를 출력합니다.

0.30000000000000004

이것은 파이썬의 결함이 아니라, 컴퓨터가 숫자를 처리하는 방식 때문에 발생하는 부동소수점(Floating-point) 오차입니다.

컴퓨터는 모든 데이터를 0과 1로 이루어진 2진수로 저장합니다. 정수는 2진수로 정확하게 표현할 수 있지만, 십진수 소수 중 상당수(예: 0.1, 0.2)는 2진수로 바꾸면 무한소수가 됩니다. 컴퓨터는 한정된 메모리에 이 무한소수를 잘라서 저장해야 하므로 미세한 반올림 오차가 생기게 됩니다.

실수 오차를 해결하는 2가지 방법

  1. round() 함수로 반올림하기

    단순한 화면 출력이나 계산에서는 round() 함수를 사용하여 원하는 소수점 자리에서 반올림하는 것이 가장 간단합니다.

    round(0.1 + 0.2, 2) -> 0.3 (소수점 둘째 자리까지 정제)

  2. decimal 모듈 사용하기

    금융, 회계 등 소수점 오차가 단 0.0001도 허용되지 않는 정밀한 계산이 필요할 때는 파이썬 기본 내장 모듈인 decimal을 사용합니다.

Python
from decimal import Decimal

result = Decimal('0.1') + Decimal('0.2')
print(result)  # 0.3 정확하게 출력


4. 복합 대입 연산자로 코드 줄이기

변수의 값을 자기 자신과 계산하여 다시 저장할 때 코드를 훨씬 간결하게 줄여주는 연산자가 있습니다.

  • x = x + 3 --> x += 3

  • x = x - 2 --> x -= 2

  • x = x * 5 --> x *= 5

이러한 표기법을 복합 대입 연산자라고 부르며, 앞으로 반복문이나 점수를 누적 계산할 때 매번 사용하게 되므로 눈에 익혀두는 것이 좋습니다.

핵심요약

  • 정수(int)와 실수(float)는 메모리 저장 방식이 다르며, 일반 나누기(/) 연산의 결과는 항상 실수 형태로 출력됩니다.

  • 몫(//), 나머지(%), 거듭제곱(**) 연산자는 단순 사칙연산 외에 조건 판별이나 시간 계산 등에 자주 쓰입니다.

  • 컴퓨터의 2진수 소수 표현 한계로 인해 실수 연산 시 미세한 오차가 발생하므로, 상황에 따라 round() 함수나 decimal 모듈을 활용해야 합니다.