我有一个类似的模型:
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)。
怎么了?
答案 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
,这些值就可以了。