我发现了很多关于如何在JSTL中舍入数字的问题。我的问题恰恰相反。不知何故,当我计算胜利/总数以获得胜利的百分比时,我总是得到0或1.模式是一致的:如果胜利> =损失,则结果为1,否则为零。所以似乎有一个Math.round在这里执行。但我不知道它来自哪里。
我一直在尝试重现这个错误,但每当我尝试重现它时,我实际上得到了我期望的值(值介于 0和1之间)。这让我觉得问题是因为我正在执行SQL查询,并将列表结果添加到模型中(我使用的是Spring MVC),虽然我不确定为什么会出现问题。
Spring MVC控制器代码:
@RequestMapping(value = "/player/{player}", method = RequestMethod.GET)
public String player(@PathVariable String player, Model model) {
String query = "SELECT v2.player, SUM(IF(v1.result >= 26, 1, 0)) `playerWins`, " +
"SUM(IF(v2.result >= 26, 1, 0)) `oppWins` FROM mines_playing AS v1 " +
"JOIN mines_playing AS v2 ON (v1.gameid = v2.gameid) AND (v1.playerpos != v2.playerpos) " +
"JOIN mines AS v3 ON (v1.gameid = v3.gameid) AND v3.finished = 1 " +
"WHERE v1.player = ? AND v3.finished = 1 " +
"GROUP BY v2.player " +
"ORDER BY playerWins DESC";
Session sess = sessionFactory.openSession();
SQLQuery q = sess.createSQLQuery(query);
q.setString(0, player);
q.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<?> list = q.list();
model.addAttribute("size", list.size());
model.addAttribute("winList", list);
model.addAttribute("player", player);
sess.disconnect();
return "player/playerstats";
}
JSTL代码:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
(...)
<c:forEach items="${winList}" var="element">
<c:set var="lost" value="${element['oppWins']}" />
<c:set var="wins" value="${element['playerWins']}" />
<c:set var="total" value="${wins + lost}" />
<c:if test="${total > 0}">
<tr>
<td><a href="<c:url value="vs/${element['player']}" />"><c:out value="${element['player']}">Null</c:out></a></td>
<td>${total}</td>
<td>${wins}</td>
<td>${lost}</td>
<td>${wins / total}</td>
</tr>
</c:if>
</c:forEach>
我做错了什么?为什么wins / total的值会自动舍入?
答案 0 :(得分:3)
您使用的是“可分割”数据类型吗?
尝试将其解析为数字。像这样:
<c:set var="wins" ><fmt:parseNumber type="number" value="${element['playerWins']}" /></c:set>
<c:set var="lost" ><fmt:parseNumber type="number" value="${element['oppWins']}" /></c:set>
答案 1 :(得分:-1)
你无法从代码中分辨出来,但我想是因为胜利和总数是整数。整数除法产生整数。