Django 팁: 돈을 위해 DecimalField 사용
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을(를) 사용하여 게시된 기사. 무료로 사용해 보세요.
Reference
이 문제에 관하여(Django 팁: 돈을 위해 DecimalField 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/koladev/django-tip-use-decimalfield-for-money-3f63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)