使用注释获取百分比给我结果,不带逗号 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列是整数并且与 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, 'nomberesteda': 300, 'percent': 23.33},

{'nomberhodor': 64, 'nomberesteda': 150, 'percent': 42.66}, 

{'nomberhodor': 33, 'nomberesteda': 66, 'percent': 50.00}, 

{'nomberhodor': 50, 'nomberesteda': 200, 'percent': 25.00}, 

{'nomberhodor': 220, 'nomberesteda': 725, 'percent': 30.34},

{'nomberhodor': 567, 'nomberesteda': 900, 'percent': 63.00}, 

{'nomberhodor': 309, 'nomberesteda': 910, 'percent': 33.95}]>


白板的微信
浏览 114回答 2
2回答

芜湖不芜

您可以使用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 FloatFieldfrom django.db.models.functions import Cast.annotate(    nomberhodor=Sum('nomberhodor'),    nomberesteda=Sum('nomberesteda'),    percent=Cast(F('nomberhodor'), output_field=FloatField()) *        100/F('nomberesteda')    ))

当年话下

percent=ExpressionWrapper(Cast(F('nomberhodor'), FloatField())/F('nomberesteda'),&nbsp; &nbsp; output_field=FloatField()))&nbsp; &nbsp; print(listilam):<QuerySet [{'percent': 0.23333333333333334},&nbsp;{'percent': 0.4266666666666667},&nbsp;{'percent': 0.5}, { 'percent': 0.25},&nbsp;{'percent': 0.30344827586206896},&nbsp;{'percent': 0.63},&nbsp;{'percent': 0.3395604395604396}]>现在工作了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python