python - Django F() 除法​​ - 如何避免四舍五入

标签 python django django-queryset

我有这个代码:

q = MyModel.objects.order_by('-value1').annotate(
            res=ExpressionWrapper(
                (F('value1') / F('value2')), 
                output_field=FloatField()),
            )

for i in q:                                          
    print(i.value1, i.value2, i.res)

因此,输出将是:

5 10 0.0
1 2 0.0

但是我需要

5 10 0.5
1 2 0.5

Wy F() 四舍五入结果?如何不这样做?

谢谢!

最佳答案

只需利用F() 对乘法的支持即可将一个因数转换为十进制数。

组合表达式看起来像:

from decimal import Decimal

q = MyModel.objects.order_by('-value1').annotate(
            res=ExpressionWrapper(
                (F('value1') * Decimal('1.0') / F('value2')), 
                output_field=FloatField()),
            )

我发现这种更优雅的方法是在 value1 字段上编写原始 SQL CAST,然后进行除法。

关于python - Django F() 除法​​ - 如何避免四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37091812/

相关文章:

Django admin : prevent add, 更改,但不删除

django - 在不指定查找的情况下调用 prefetch_lated() 有用吗?

python - 使用多个术语和 Q 过滤器对reduce 查询进行排序

python - Django all-auth 删除在注册表单中两次询问密码

python - 在 django 1.11 中添加没有类别的博客文章

python - 意外错误 : replace() takes 2 positional arguments but 3 were given

python - Django Queryset 返回多对多字段中的对象

python - 输入到 precision_recall_curve - predict 或 predict_proba 输出?

python - 使用 sympy 反转函数并评估反转函数给了我一个错误的答案

django - 使用 docker/fig 运行 Django 开发服务器时,为什么隐藏了一些日志输出?