반응형
Decimal
클래스는 Python의 decimal
모듈에 포함된 클래스입니다. 이 클래스는 고정 소수점(decimal floating point) 수학을 수행하기 위해 사용됩니다. 일반적인 부동 소수점 연산이 근사치로 수행되는데 반해, Decimal
클래스는 더 높은 정확도를 제공하며, 특히 금융 계산이나 정확한 소수 계산이 필요한 경우에 유용합니다.
주요 특징 및 사용법
- 정확한 소수 연산:
Decimal
클래스는 내부적으로 10진수를 기반으로 하여 소수 연산을 처리합니다. 부동 소수점 연산에서는 자주 발생하는 오차 문제를 줄일 수 있습니다.
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
c = a + b
print(c) # 0.3 출력
위 예제에서 0.1
과 0.2
를 더하면 정확히 0.3
이 나옵니다. 일반적인 부동 소수점으로 계산하면 약간의 오차가 발생할 수 있지만, Decimal
클래스는 이러한 오차를 방지합니다.
- 문자열 또는 튜플을 사용한 초기화:
Decimal
객체는 문자열이나 정수, 튜플 등을 사용해 초기화할 수 있습니다. 소수점이 포함된 숫자를 문자열로 전달하는 것이 권장됩니다.
d1 = Decimal('3.14')
d2 = Decimal((0, (3, 1, 4), -2)) # 0이 부호, (3, 1, 4)는 유효숫자, -2는 소수점 위치
- 수학 연산 및 함수:
Decimal
클래스는 기본적인 수학 연산 뿐만 아니라sqrt()
,log()
,exp()
등의 수학 함수도 제공합니다.
result = Decimal('1.1') ** Decimal('2')
print(result) # 1.21 출력
- 문맥(context) 관리:
decimal
모듈은 계산의 정밀도와 반올림 방법 등을 관리하는 문맥(context)을 설정할 수 있습니다.
from decimal import getcontext
getcontext().prec = 4 # 계산 시 소수점 이하 4자리까지 정밀도 설정
print(Decimal('1.12345') + Decimal('2.56789')) # 3.691 출력
- 비교 연산:
Decimal
객체는 정수나 부동 소수점과 비교할 때도 정확하게 비교할 수 있습니다.
print(Decimal('1.10') == Decimal('1.1')) # False (정확하게 비교)
- 정확도 제어 및 반올림:
decimal
모듈에서는 반올림 방법도 여러 가지를 제공합니다. 예를 들어, 반올림을 "올림"이나 "내림" 등으로 설정할 수 있습니다.
from decimal import ROUND_UP, ROUND_DOWN
d = Decimal('1.234')
rounded_up = d.quantize(Decimal('0.01'), rounding=ROUND_UP)
rounded_down = d.quantize(Decimal('0.01'), rounding=ROUND_DOWN)
print(rounded_up) # 1.24 출력
print(rounded_down) # 1.23 출력
언제 Decimal
을 사용할까?
- 금융 계산: 예를 들어, 이자 계산이나 회계 관련 작업에서는 매우 작은 소수점 오차도 문제가 될 수 있습니다. 이때
Decimal
을 사용하여 정확도를 높일 수 있습니다. - 과학적 계산: 높은 정확도가 요구되는 계산에서 유용합니다.
- 정밀도가 중요한 애플리케이션: 예를 들어, 물리학, 통계학 등의 분야에서의 계산에 사용될 수 있습니다.
Decimal
클래스는 이러한 특징들로 인해, 부동 소수점의 오차 문제를 해결하고자 할 때 강력한 도구가 됩니다.
반응형
'언어 > Python' 카테고리의 다른 글
[ Python ] 정밀한 계산에 Fraction으로 분수를 사용하기 (0) | 2024.08.25 |
---|---|
[ Python ] 큰 수 계산에 Decimal 객체 사용하기 (0) | 2024.08.25 |
[ Python ] 클래스를 상속해서 나의 클래스 만들기 (다중 상속 포함) (0) | 2024.08.13 |
[ Python ] 클래스 내에서 멤버 변수 선언하기 (지역/전역) (0) | 2024.08.13 |
[ Python ] Class 의 method ( 멤버 함수) 정의하기 (0) | 2024.08.13 |