Django DecimalField在保存时生成“量化结果对于当前上下文有太多数字”错误

时间:2013-12-04 02:16:41

标签: python django django-models decimal

我有一个类似的模型:

class ModelWithDecimal(models.Model):
    value = models.DecimalField(max_digits=2,decimal_places=2)

......当我尝试时...

obj = ModelWithDecimal(value="1.5")
obj.save()

我在保存期间收到quantize result has too many digits for current context错误。不应该没问题 - 它小于2位数,小数点后小于2位数?

模型发生同样的错误:

class ModelWithDecimal(models.Model):
    value = models.DecimalField(max_digits=11,decimal_places=8)

......并尝试了实例......

obj = ModelWithDecimal(value="1005.7")
obj.save()

再次,似乎它应该工作:只有4位总数(小于11),并且只有1位小数(小于8)。

怎么了?

1 个答案:

答案 0 :(得分:29)

问题是每个实例都使用了所有十进制decimal_places,无论你是否有非零数字,只留下(max_digits - decimal_places)个数字用于左边-THE小数。

因此对于DecimalField(max_digits=2,decimal_places=2),小数点左边有位的空间,而“1.5”则不适合。而对于DecimalField(max_digits=11,decimal_places=8),小数点左边只有三个位的空间,而“1005.7”则不适合。

展开您的max_digits,这些值就可以了。