Django 팁: 돈을 위해 DecimalField 사용

4138 단어 djangodecimalfloat
Django에서 통화 값으로 작업할 때 첫 번째 생각은 모델에서 통화를 나타내기 위해 FloatField를 사용하는 것입니다. 그러나 FloatField는 내부적으로 float 유형을 사용하므로 일부 정밀도 문제가 있습니다.

문제



이 코드를 살펴보십시오. Python에서 float 숫자를 사용하는 간단한 작업입니다.

>>> .1 + .1 + .1 == .3
False
>>> .1 + .1 + .1
0.30000000000000004


일반적으로 덧셈이 의미가 있다고 생각하지만 플로트 근사와 관련된 몇 가지 문제 때문에 방정식은 3이 아닙니다.
반올림을 사용하여 이러한 문제를 해결할 수 있지만 화폐 가치와 정밀도 문제를 다루는 경우 소수점을 사용해야 할 때일 수 있습니다.

해결책



기본적으로 정밀도가 중요한 경우 부동소수점 대신 소수점을 사용합니다. 이전 예제를 Decimal 로 다시 작성해 보겠습니다.

>>> from decimal import Decimal
>>> Decimal('.1') + Decimal('.1') + Decimal('.1') == Decimal('.3')
True
>>> Decimal('.1') + Decimal('.1') + Decimal('.1')
Decimal('0.3')


여기서 우리는 문자열 값으로 십진수 값을 초기화하고 있습니다. 플로트를 사용할 수 있지만 앞서 말했듯이 플로트에는 근사 문제가 있습니다.

그런 다음 DecimalField 를 사용하여 Django에서 Decimal로 작업할 때 필드를 정의할 때 decimal_places 속성을 정확하게 지정하는 것이 항상 좋은 습관입니다.


class Product(models.Model):
    title = models.CharField(max_length=64)
    description = models.TextField()

    price = models.DecimalField(max_digits=6, decimal_places=2)

DecimalField here 에 대해 자세히 알아볼 수 있습니다.

bloggu.io을(를) 사용하여 게시된 기사. 무료로 사용해 보세요.

좋은 웹페이지 즐겨찾기