돈 표현에 어떤 수업을 사용할 수 있습니까?
-
05-07-2019 - |
문제
대부분의 반올림 오류를 피하기 위해 돈을 대표하는 데 어떤 클래스를 사용해야합니까?
내가 사용해야할까요 Decimal
, 또는 간단한 내장 number
?
기존이 있습니까? Money
내가 사용할 수있는 통화 변환을 지원하는 클래스?
내가 피해야 할 함정이 있습니까?
해결책
나는 당신이 Python에 대해 이야기한다고 가정합니다.http://code.google.com/p/python-money/"파이썬에서 돈과 통화로 작업하기위한 기본 요소" - 제목은 자기 설명입니다 :)
다른 팁
플로팅 포인트 번호를 사용하여 돈을 나타내지 마십시오. 플로팅 숫자는 십진법으로 정확하게 숫자를 나타내지 않습니다. 당신은 복합 반올림 오류의 악몽으로 끝나고 통화 사이를 안정적으로 변환 할 수 없습니다. 보다 마틴 파울러의 주제에 대한 짧은 에세이.
자신의 수업을 작성하기로 결정했다면, 나는 그것을 소수 데이터 형식.
Python-Money는 꽤 오랫동안 유지되지 않았고 소스 코드에는 이상하고 쓸모없는 코드가 있으며 통화 교환이 단순히 파손되기 때문에 Python-Money가 좋은 옵션이라고 생각하지 않습니다.
노력하다 py-moneyed. Python-Money보다 개선되었습니다.
그냥 사용하십시오 소수.
당신은 관심이있을 수 있습니다 Quantlib 금융 작업을 위해.
통화 유형을 처리하기위한 클래스가 내장되어 있으며 4 년간의 적극적인 개발을 청구합니다.
이 라이브러리를 볼 수 있습니다. 파이썬 돈. 나는 그것에 대한 경험이 없기 때문에 그것의 유용성에 대해 언급 할 수 없습니다.
통화를 정수로 처리하기 위해 사용할 수있는 '트릭':
- '센트'로 표현하기 위해 100 / 100 (예 : $ 100,25-> 10025)을 곱합니다.
단순하고 가벼우면서도 확장 가능한 아이디어 :
class Money():
def __init__(self, value):
# internally use Decimal or cents as long
self._cents = long(0)
# Now parse 'value' as needed e.g. locale-specific user-entered string, cents, Money, etc.
# Decimal helps in conversion
def as_my_app_specific_protocol(self):
# some application-specific representation
def __str__(self):
# user-friendly form, locale specific if needed
# rich comparison and basic arithmetics
def __lt__(self, other):
return self._cents < Money(other)._cents
def __add__(self, other):
return Money(self._cents + Money(other)._cents)
당신은 할 수 있습니다 :
- 응용 프로그램에서 필요한 것만 구현하십시오.
- 성장함에 따라 확장하십시오.
- 필요에 따라 내부 표현 및 구현을 변경하십시오.