我已经构建了一个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
答案 0 :(得分:0)
在乘以时尝试使用浮点值:
... ELSE ((total_revenue / total_revenue_ly - 1) * 100.0)