2

JSTL で数値を丸める方法について多くの質問を見つけました。私の質問は反対です。どういうわけか、勝数/合計を計算して勝率を取得すると、常に 0 または 1 になります。パターンは一貫しています。勝数 >= 負けの場合、結果は 1 になり、それ以外の場合は 0 になります。ここのどこかで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>

私は何を間違っていますか?勝数/合計の値が自動的に四捨五入されるのはなぜですか?

4

2 に答える 2

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>
于 2013-03-05T20:23:55.050 に答える
0

コードからはわかりませんが、wins と total が整数であるためだと思います。整数除算の結果は整数になります。

于 2013-03-05T19:49:41.523 に答える