2014-11-04 61 views
3

我有一个DecimalField在我的形式,我想限制min_value=0.1max_value=99.99Django的小数表单字段不采取值等于MAX_VALUE

purity_percent = forms.DecimalField(max_value=99.99, min_value=0.1, decimal_places=2) 

但是,当我试图进入价值等于0.199.99我会不行,我得到这些错误

For 0.1 : Ensure this value is greater than or equal to 0.1.

For 99.99 : Ensure this value is less than or equal to 99.99.

我该如何做到这一点呢?

回答

3

99.99这样的浮点数以二进制形式存储。许多可用有限小数位表示的数字都是以二进制形式重复的分数(请参阅许多其他问题)。

尤其字面99.99接近:

>>> "{:.15f}".format(99.99) 
'99.989999999999995' 

Python中也有小数:

>>> from decimal import Decimal 
>>> d = Decimal("99.99") 

果然,小数99.99比浮动较大MAX_VALUE 99.99:

>>> d <= 99.99 
False 

Django开发人员知道二进制文件,这是en轮胎存在的原因DecimalField:它存储小数。

结论:使用Decimal("99.99")作为您的max_value,而不是float。

+0

谢谢。非常好的解释。 – 2014-11-04 13:20:14