我的表单中有一个DecimalField,我想限制min_value=0.1
和max_value=99.99
purity_percent = forms.DecimalField(max_value=99.99, min_value=0.1, decimal_places=2)
但是当我尝试输入等于0.1
或99.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.
怎么做我也包括那些限制。?
答案 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,而非浮动。