django十进制表单字段不取值等于max_value

时间:2014-11-04 06:14:04

标签: django django-forms

我的表单中有一个DecimalField,我想限制min_value=0.1max_value=99.99

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.

怎么做我也包括那些限制。?

1 个答案:

答案 0 :(得分:3)

浮点数,如99.99,以二进制形式存储。许多可以用有限十进制数字表示的数字是二进制的重复分数(参见许多其他问题)。

特别是,文字99.99更接近:

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

Python也有小数:

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

果然,Decimal 99.99大于float max_value 99.99:

>>> d <= 99.99
False

Django开发人员知道二进制文件,这就是DecimalField存在的全部原因:它存储了Decimals。

结论:使用Decimal("99.99")作为max_value,而非浮动。