Grails HQL查询将数字舍入

Grails HQL查询将数字舍入,grails,groovy,hql,Grails,Groovy,Hql,我已经构建了一个grails应用程序,正在控制器中使用HQL使用g-select标记将参数传递给index.gsp。我面临一个非常简单的问题,当值到达前端浏览器/客户端时,数字被舍入 我以前在控制器中使用SQL时没有遇到过这种情况,但现在因为我的index.gsp和控制器使用params和g select进行通信,所以必须使用HQL,这就对所有数字进行了取整,包括基本指标、计算指标等 查询示例控制器: 在这个查询中,我从我的后端表中获取收入,它是YoY和WoW,甚至这个值也被四舍五入到可视化中显

我已经构建了一个grails应用程序,正在控制器中使用HQL使用g-select标记将参数传递给index.gsp。我面临一个非常简单的问题,当值到达前端浏览器/客户端时,数字被舍入

我以前在控制器中使用SQL时没有遇到过这种情况,但现在因为我的index.gsp和控制器使用params和g select进行通信,所以必须使用HQL,这就对所有数字进行了取整,包括基本指标、计算指标等

查询示例控制器:

在这个查询中,我从我的后端表中获取收入,它是YoY和WoW,甚至这个值也被四舍五入到可视化中显示的所有值中

def com = Com.executeQuery("
        SELECT p.date_hour
            ,p.total_revenue
            ,CASE 
                WHEN total_revenue_ly IN (
                        0
                        ,NULL
                        )
                    THEN 0
                ELSE ((total_revenue / total_revenue_ly - 1) * 100)
                END AS yoy
            ,CASE 
                WHEN total_revenue_lw IN (
                        0
                        ,NULL
                        )
                    THEN 0
                ELSE ((total_revenue / total_revenue_lw - 1) * 100)
                END AS wow
        FROM Com p
        WHERE p.department = ?
            AND p.device = ?
            AND p.browser = ?
            AND p.platform = ?
            AND p.mv = ?
            AND p.time_period = ?
        ORDER BY col_0_0_ ASC",
   [params.department, params.device, params.browser, 
   params.platform, params.mv, params.time_period])
   render com as JSON
我还必须编写转换率等计算指标的查询:

def com = Tablev1.executeQuery("
        SELECT p.date_hour
            ,CASE 
                WHEN visits IN ((0,NULL)
                    THEN 0
                ELSE ((p.orders / p.visits) * 100)
                END AS metric
            ,CASE 
                WHEN visits IN ((0,NULL)
                    THEN 0
                WHEN orders_ly IN ((0,NULL)
                    THEN 0
                WHEN visits_ly IN ((0,NULL)
                    THEN 0
                ELSE ((((orders / visits) / (orders_ly / visits_ly)) - 1) * 100)
                END AS yoy
            ,CASE 
                WHEN visits IN ((0,NULL)
                    THEN 0
                WHEN orders_lw IN ((0,NULL)
                    THEN 0
                WHEN visits_lw IN ((0,NULL)
                    THEN 0
                ELSE ((((orders / visits) / (orders_lw / visits_lw)) - 1) * 100)
                END AS wow
        FROM Tablev1 p
        WHERE p.platform = ?
            AND p.mv = ?
            AND p.time_period = ?
        ORDER BY col_0_0_ ASC",

[params.platform, params.mv, params.time_period])
            render com as JSON
甚至这些值也被舍入。我在浏览器的控制台中显示值,在数组中只显示四舍五入的值,我的可视化是使用highcharts.js的图形,但我认为highcharts.js没有问题,因为反馈给highcharts的数组只四舍五入。 第一个查询中的收入数据类型也是float,但仍然是四舍五入的。 问题在于HQL或索引控制器通信

在另一个应用程序中,当数字四舍五入时使用case,而当显示小数时不使用case,我不理解这一点。有人能解释一下吗

我如何解决这个问题? 欢迎提出任何方法/建议

更新:

忽略整个情况,这样的简单查询也传递舍入值

def com = Com.executeQuery("
            SELECT p.date_hour
                ,p.total_revenue
            FROM Com p
            WHERE p.department = ?
                AND p.device = ?
                AND p.browser = ?
                AND p.platform = ?
                AND p.mv = ?
                AND p.time_period = ?
            ORDER BY col_0_0_ ASC",
       [params.department, params.device, params.browser, 
       params.platform, params.mv, params.time_period])
       render com as JSON

尝试在相乘时使用浮点值:

... ELSE ((total_revenue / total_revenue_ly - 1) * 100.0)

您是否有一个在不使用CASE时可以正常工作的示例查询?我不确定我是否正确理解了这个问题。@tax,请检查更新的答案。控制器正在传递舍入值,即使它的数据类型是float,并且后端的值是decimal!我是否可以在grails中的调试中打印控制器控制台中选择的值?已尝试,不起作用。我尝试了一个简单的指标:total_revenue*1.00,以及您提供的相同示例,两者都不起作用。还有其他的解决方法吗?嘿,它适用于度量,但无论我们在哪里使用case-when,它都不起作用。你能告诉我case-when语句的另一种方式吗?你的例子并没有说明这一点,这就是我为什么要问的原因。不带case语句的查询不包括将浮点值和整数值相乘的计算。