【问题标题】:“quantize result has too many digits for current context” error on save“量化结果对于当前上下文有太多数字”保存时出错
【发布时间】:2016-03-05 09:38:34
【问题描述】:

我知道这个问题已经被问过很多次了,但不知何故没有解决。我在模型 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

我也试过这种方式的quantize方法:

sc = Decimal(pos_count)/Decimal(com_count)
Decimal(sc).quantize(Decimal('12.12'), rounding = ROUND_DOWN)
song_item.sent_score = sc
song_item.save()

但它仍然给出同样的错误请告诉我我哪里出错了

【问题讨论】:

    标签: django python-2.7 django-models decimal


    【解决方案1】:

    您不应该像第一次尝试那样使用getcontext().prec = 2,因为它会改变一切的精度,而不仅仅是这个计算。

    第二个示例的问题是,Decimal(sc).quantize(Decimal('12.12'), rounding=ROUND_DOWN) 甚至 sc.quantize(Decimal('12.12'), rounding=ROUND_DOWN) 都不会更改 sc。这是一个有效的示例:

    sc = Decimal(pos_count)/Decimal(com_count)
    sc_adjusted = sc.quantize(Decimal('12.12'), rounding=ROUND_DOWN)
    song_item.sent_score = sc_adjusted
    song_item.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多