HQL查询将数字四舍五入

时间:2014-07-28 08:27:39

标签: grails groovy hql

我已经构建了一个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有问题,因为数组需要高图是只有四舍五入。 第一个查询中的收入数据类型也是浮动的,但它仍然是四舍五入的。 问题在于HQL或索引控制器通信

在另一个应用程序中,使用大小写数字而不使用大小写时显示小数,我不明白这一点。有人可以解释一下吗?

如何解决此问题? 任何approches /建议都是最受欢迎的。

更新:

忽略整个案例时,像这样的简单查询也传递舍入值

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

1 个答案:

答案 0 :(得分:0)

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

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