Python 소수점 모듈은 숫자의 적절한 정밀도와 반올림을 통해 나눗셈을 도와줍니다.
Python 소수점 모듈
이 Python의 소수점 모듈에 대한 레슨에서는 정밀도와 포맷팅, 그리고 계산을 위해 프로그램에서 소수점 숫자를 관리하는 방법을 살펴볼 것입니다. 소수점 숫자의 정밀도는 숫자를 올바르게 처리하지 않으면 쉽게 손실될 수 있습니다. 소수점 모듈과 해당하는 함수들이 이러한 영역에서 어떻게 도움을 주는지 알아봅시다.
소수점 숫자 다루기
소수점 숫자는 고정된 소수점을 가진 부동소수점 숫자입니다. 우리의 필요에 따라 수를 올바르게 반올림해야만 결과가 예상한 대로 나옵니다. Python의 소수점 모듈은 소수점 숫자에 대해 더 정확하게 도와줍니다.
소수점 모듈 필요성
실제로 이 모듈을 사용하기 전에, 우리가 어떤 정밀도에 대해 이야기하는지 보고 이 모듈이 실제로 왜 필요한지 확인해 봅시다. 다음 코드 조각을 살펴보세요:
division = 72 / 7
print(division)
이 프로그램의 출력을 살펴봅시다: 음, 답변이 실제로 정확하지 않았고 소수점이 전혀 없었습니다! 소수점 모듈을 사용하여 이를 어떻게 수정할 수 있는지 살펴보겠습니다.
소수점 모듈 사용하기
이 게시물에서 만드는 모든 프로그램에서 소수점 모듈을 가져올 것입니다:
import decimal
이 모듈에서 특정 함수만 가져올 수도 있습니다. 이렇게 할 수 있습니다:
from decimal import Decimal
이제 소수점 모듈을 몇 가지 프로그램에 넣어 보겠습니다.
Python 소수점 모듈 예제
이제 모듈과 관련된 예제를 시작하겠습니다.
소수점으로 나누기 수정하기
여기서는 우리가 위에서 작성한 프로그램을 수정하여 부동 소수점 결과를 생성해야 했던 나눗셈을 보정할 것입니다. 소수 모듈이 포함된 수정된 프로그램은 다음과 같이 보일 것입니다:
import decimal
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
이 프로그램의 출력을 살펴봅시다: 이제 나눗셈이 올바르고 정확하게 되었음을 알 수 있습니다. 아니면 너무 정밀한가요?
단일 연산의 정밀도 제어
마지막 프로그램에서는 답에 25자리의 소수점이 있었습니다. 그러나 소수점 값을 세 자리까지만 원했다면 어떨까요? 이것도 제어할 수 있습니다. 여기서는 프로그램의 다른 연산에 반영되지 않을 답의 정밀도를 제어할 것입니다:
import decimal
with decimal.localcontext() as ctx:
ctx.prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
우리는 한 번에 나눗셈 연산을 두 번 수행하여 한 가지를 증명했습니다. 이 프로그램의 출력을 살펴봅시다: 뭔가 눈에 띄시나요? 우리가 설정한 정밀도는 단 한 번에만 유효했습니다. 다음에 나눗셈을 수행할 때는 동일한 결과를 다시 얻었습니다.
완전한 프로그램의 정밀도 제어
프로그램에서 전역적으로 정밀도를 제어하는 것도 가능합니다. 프로그램에서 많은 수의 숫자를 다룰 때 항상 권장되는 것은 아닙니다. 다음은 예입니다:
import decimal
decimal.getcontext().prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
이 프로그램의 출력을 살펴봅시다:
숫자 반올림
round(...)
함수를 사용하여 숫자를 우아하게 반올림하는 것이 가능합니다. 이를 시도해 봅시다:
import decimal
# 13.48 또는 13.49로 반올림될 수 있음
rounded = round(13.485, 2)
print(rounded)
이 프로그램의 출력을 살펴봅시다: 프로그램에서 숫자는 13.48 또는 13.49로 반올림될 수 있습니다. 기본적으로
round(...)
함수는 내림을 수행합니다. 이를 변경할 수도 있습니다:
import decimal
# 13.48 또는 13.49로 반올림될 수 있음
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))
이 프로그램의 출력을 살펴봅시다:
파이썬 Decimal 컨텍스트 가져오기
소수점 모듈에 대한 기본 컨텍스트를 확인하고 싶다면 다음 스크립트를 사용할 수 있습니다:
from decimal import *
print(getcontext())
이 프로그램의 출력을 확인해 봅시다: 파이썬 소수점 모듈에 대한 설명은 여기까지입니다. 소수점 숫자와 함께 작업할 때 매우 유용합니다.
Source:
https://www.digitalocean.com/community/tutorials/python-decimal-division-round-precision