我的表单中有一个 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.
我该如何将那些也包括在限制中。?

最佳答案

浮点数,如 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/

10-16 07:21