java - JSTL 除法自动舍入为 1 或 0

标签 java spring-mvc jstl division

我发现很多问题询问如何在 JSTL 中对数字进行舍入。我的问题恰恰相反。不知何故,当我计算获胜次数/总计以获得获胜百分比时,我总是得到 0 或 1。模式是一致的:如果获胜 >= 损失,结果为 1,否则为零。所以看起来这里的某个地方正在进行数学回合。但我不知道它从哪里来。

我一直在尝试重现此错误,但每当我尝试重现它时,我实际上都会得到我期望的值(0 和 1 之间的值)。这让我认为问题是因为我正在执行 SQL 查询,并将列表结果添加到模型中(我正在使用 Spring MVC),尽管我不确定为什么会出现问题。

Spring MVC Controller 代码:

@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>

我做错了什么?为什么获胜次数/总次数的值会自动四舍五入?

最佳答案

您使用的是“可分割”数据类型吗?

尝试将其解析为数字。就像这样:

<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>

关于java - JSTL 除法自动舍入为 1 或 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15232594/

相关文章:

java - JComboBox 中的 setSelectedItem 不执行任何操作

Java : Using parent class method to access child class variable

authentication - Spring MVC 3.1 如何在自定义身份验证提供程序(实现 AuthenticationProvider)中访问 HttpSession

java - Spring MVC 4 服务@tTransactional 不起作用

java - 有什么方法可以在不复制 javascript 标签的情况下将 ajax 与 jSTL 自定义标签一起使用?

java - 新线程不显示框架

java - 在 Spring AWS Cloud Framework 中设置 SNS WaitTime

java - JSF 将 OutputText 和 InputText 值传递给属性

javascript - 将参数传递给查询字符串并触发 Javascript 函数

java - Java 更新后 Eclipse 中出现 FileNotFoundException