본문 바로가기
Python/기본문법

Decimal (파이썬 데이터 타입)

by yororing 2024. 9. 2.

00 개요

  • Decimal은 Python의 decimal 모듈에서 제공하는 데이터 타입으로, 소수점 숫자를 정확하게 처리할 수 있는 도구 제공
  • Decimal 타입은 특히 금융 계산이나 정밀한 수치 연산이 필요한 경우에 유용함

01 Decimal이란

1. 정의

  • 소수점 이하 자릿수를 정확하게 저장하고 계산할 수 있도록 설계된 데이터 타입
  • 부동 소수점 숫자의 근사 오차를 피하고, 높은 정밀도로 숫자를 다룰 수 있음

2. 주요 특징

  • 정확한 표현: Decimal은 소수점 이하 자릿수를 정확히 표현 가능
  • 설정 가능한 정밀도: 사용자가 소수점 자리수와 전체 자리수를 설정할 수 있음
  • 부동 소수점 문제 방지: 부동 소수점 숫자는 이진수로 근사값을 저장하기 때문에, 계산 과정에서 오차가 발생할 수 있지만, Decimal은 이러한 오차를 방지함

3.  사용 이유

  • Decimal은 소수점 숫자의 정확한 표현과 계산을 보장하는 데이터 타입으로, 금융, 과학적 계산 등에서 필요한 정밀도와 정확성을 제공

4. 부동 소수점 계산에서의 오차 예시

# 부동 소수점 계산 예시

# 0.1과 0.2를 더한 결과 출력
result = 0.1 + 0.2
print(f"0.1 + 0.2 = {result}")        # 0.1 + 0.2 = 0.30000000000000004

# 결과를 포맷팅하여 소수점 17자리까지 출력
print(f"0.1 + 0.2 (17 decimal places) = {result:.17f}")    # 0.1 + 0.2 (17 decimal places) = 0.30000000000000004
  • 설명
    • 근본 원인: 0.1과 0.2는 이진수로 정확히 표현할 수 없는 숫자임. 부동 소수점 수치는 이진수로 근사값으로 저장되기 때문에, 계산 결과에 미세한 오차가 포함될 수 있음
    • 결과: 0.1 + 0.2의 결과는 0.30000000000000004로 나타남. 이는 기대한 0.3과 약간의 차이가 있는 결과임.'
    • 포맷팅: :.17f를 사용하여 소수점 17자리까지 결과를 포맷팅하면, 이 오차를 명확히 확인 가능. 실제로는 오차가 매우 미세하지만, 정밀한 계산에서는 문제가 될 수 있음. 부동 소수점 오차는 과학적 계산이나 금융 애플리케이션에서 중요한 고려사항이 될 수 있음. 이런 경우 Decimal과 같은 데이터 타입을 사용하여 정확한 소수점 계산을 수행하는 것이 좋음!

5. Decimal 사용 예시

1) 간단한 덧셈

from decimal import Decimal

# Decimal 객체 생성
a = Decimal('0.1')
b = Decimal('0.2')

# 덧셈 연산
result = a + b
print(result)  # 0.3
  • 설명:
    • Decimal을 사용하여 0.1과 0.2를 더한 결과가 정확하게 0.3으로 나타남!
    • 부동 소수점 숫자에서는 이러한 계산에서 오차가 발생할 수 있지만, Decimal은 이를 방지!

2) 정밀도 설정

from decimal import Decimal, getcontext

# 소수점 자리수 설정
getcontext().prec = 6  # 총 6자리의 정밀도

# Decimal 객체 생성
number = Decimal('0.123456')

# 계산
result = number * 2
print(result)  # 0.246912
  • 설명: 정밀도를 설정하여 계산 결과가 예상대로 출력!