我的表单中有一个 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.
我该如何将那些也包括在限制中。?
最佳答案
浮点数,如 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 开发人员知道二进制,这就是
DecimalField
存在的全部原因:它存储小数。结论: 使用
Decimal("99.99")
作为 max_value,而不是浮点数。关于django十进制表单字段的值不等于max_value,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26728826/