使用注释获取百分比给我没有逗号的结果7/2 = 3而不是3.5

问题描述

我想获得以下百分比值: nomberesteda * 100 / nomberhodor = 0.00 我使用此查询集:

     listilam = MediaSecParnt.objects.filter(date__range=[primary1,primary2]).values(
            'withsecondray__name','withdegrey__name','withsecondray_id','withdegrey_id')
.annotate(nomberhodor=Sum('nomberhodor'),nomberesteda=Sum('nomberesteda'),percent=((((F('nomberhodor')*100)/(F('nomberesteda'))))))
    

此处:

percent=((((F('nomberhodor')*100)/(F('nomberesteda'))))))

百分比值不带逗号! nomberhodor culomn是intiger,与nomberesteda相同

这很鲁:

<QuerySet [{'nomberhodor': 70,'nomberesteda': 300,'percent': 23},{'nomberhodor': 64,'nomberesteda': 150,'percent': 42},{'nomberhodor': 33,'nomberesteda': 66,'percent': 50},{'nomberhodor': 50,'nomberesteda': 200,'percent': 25},{'nomberhodor': 220,'nomberesteda': 725,'percent': 30},{'nomberhodor': 567,'nomberesteda': 900,'percent': 63},{'nomberhodor': 309,'nomberesteda': 910,'percent': 33}]>

应该是:

   <QuerySet [{'nomberhodor': 70,'percent': 23.33},'percent': 42.66},'percent': 50.00},'percent': 25.00},'percent': 30.34},'percent': 63.00},'percent': 33.95}]>

解决方法

您可以使用ExpressionWrapper [Django-doc]指定输出格式:

from django.db.models import ExpressionWrapper,FloatField

.annotate(
    nomberhodor=Sum('nomberhodor'),nomberesteda=Sum('nomberesteda'),percent=ExpresssionWrapper(
        F('nomberhodor')*100/F('nomberesteda'),output_field=FloatField()
    )
)

对于某些数据库,这是由于类型推断引起的。在这种情况下,您可以使用Cast

from django.db.models import FloatField
from django.db.models.functions import Cast

.annotate(
    nomberhodor=Sum('nomberhodor'),percent=Cast(F('nomberhodor'),output_field=FloatField()) *
        100/F('nomberesteda')
    )
)
,

thnks:威廉·范·昂塞姆

percent=ExpressionWrapper(Cast(F('nomberhodor'),FloatField())/F('nomberesteda'),output_field=FloatField()))
    print(listilam):

<QuerySet [{'percent': 0.23333333333333334},{'percent': 0.4266666666666667},{'percent': 0.5},{ 'percent': 0.25},{'percent': 0.30344827586206896},{'percent': 0.63},{'percent': 0.3395604395604396}]>

它现在可以工作

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...