我知道这已被问过多次,但不知何故没有成功。我在模型Song中有这个模型字段。
sent_score = models.DecimalField(default= 0.0,max_digits=4,decimal_places=2,blank=True)
在我看来,我通过以下方式更新发送得分。
song_item = Song.objects.get(id=id)
com_list = Comment.objects.filter(song_id=id)
com_count = com_list.count()
pos_comments = com_list.filter(sentiment='positive')
pos_count = pos_comments.count()
getcontext().prec = 2
sent_score = Decimal(pos_count)/Decimal(com_count)
然而它仍然给我这个错误:
InvalidOperation: quantize result has too many digits for current context
我也用这种方式尝试了量化方法:
sc = Decimal(pos_count)/Decimal(com_count)
Decimal(sc).quantize(Decimal('12.12'), rounding = ROUND_DOWN)
song_item.sent_score = sc
song_item.save()
但它仍然会出现同样的错误,请告诉我哪里出错了
答案 0 :(得分:0)
你应该像第一次尝试一样不使用 model.store = {};
,因为它会改变所有内容的精确度,而不仅仅是这一次计算。
第二个示例的问题是,getcontext().prec = 2
甚至Decimal(sc).quantize(Decimal('12.12'), rounding=ROUND_DOWN)
不会更改sc.quantize(Decimal('12.12'), rounding=ROUND_DOWN)
。这是一个有效的例子:
sc