2014-11-04 53 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