문제

대부분의 반올림 오류를 피하기 위해 돈을 대표하는 데 어떤 클래스를 사용해야합니까?

내가 사용해야할까요 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)

당신은 할 수 있습니다 :

  • 응용 프로그램에서 필요한 것만 구현하십시오.
  • 성장함에 따라 확장하십시오.
  • 필요에 따라 내부 표현 및 구현을 변경하십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top