Djangoチップ:お金のためにDecimalfieldを使ってください
Djangoでお金の価値で働くとき、最初の考えはモデルで通貨を表すために
このコードを見てください.これはPythonでの浮動小数点数の簡単な操作です.
あなたはこれらの問題を丸めを使用して修正することができますが、お金の値と精度の問題に対処している場合は、小数を使用する時間があります.
基本的には、浮動小数点の代わりに小数点を使用するときに精度が重要です.前の例を書き直しましょう.
その後、Djangoで
bloggu.io .無料でお試しください.
FloatField
を使うことです.しかしながら、FloatField
は、いくつかの精度問題が付属するfloat
タイプを内部的に使用します.問題
このコードを見てください.これはPythonでの浮動小数点数の簡単な操作です.
>>> .1 + .1 + .1 == .3
False
>>> .1 + .1 + .1
0.30000000000000004
通常、あなたは、追加が意味をなすと思いますが、float近似によるいくつかの問題のため、式は3に等しくありません.あなたはこれらの問題を丸めを使用して修正することができますが、お金の値と精度の問題に対処している場合は、小数を使用する時間があります.
解決策
基本的には、浮動小数点の代わりに小数点を使用するときに精度が重要です.前の例を書き直しましょう.
>>> from decimal import Decimal
>>> Decimal('.1') + Decimal('.1') + Decimal('.1') == Decimal('.3')
True
>>> Decimal('.1') + Decimal('.1') + Decimal('.1')
Decimal('0.3')
ここで、小数点値を文字列値で初期化します.Floatsを使用することができますが、先に述べたように、floatには近似問題があります.その後、Djangoで
Decimal
でDecimalで働くとき、フィールドを定義するとき、それは正確にDecimalRange場所属性に正確な習慣です.
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