jstl에서 연산을 할 때(특히 나눗셈) 소수점이 제대로 안찍히고 자동으로 반올림이 되는 경우가 있다.
아무리 핸들링 하려고 해도 안됐지만 결국 해결
해결방법은 받아온 Data를 바로 쓰지 않고 포맷을 바꾼상태에서 사용해야 한다.
ex) result.SUM_ANSWER1이 70, result.SUM_ANSWER2가 1일 때
구성비율은
result.SUM_ANSWER1/(result.SUM_ANSWER1 + result.SUM_ANSWER2) 와
result.SUM_ANSWER2/(result.SUM_ANSWER1 + result.SUM_ANSWER2)
이다.
이것을 jstl로 표현하면
<c:set var="a" value="${result.SUM_ANSWER1/(result.SUM_ANSWER1 + result.SUM_ANSWER2)}"/>
<c:set var="b" value="${result.SUM_ANSWER2/(result.SUM_ANSWER1 + result.SUM_ANSWER2)}"/>
인데 결과는
a = 100, b=0 이 나온다.
해결방법은
<fmt:formatNumber var="sumAnswer1" value="${result.SUM_ANSWER1}" pattern="#.##"/>
<fmt:formatNumber var="sumAnswer2" value="${result.SUM_ANSWER2}" pattern="#.##"/>
<c:choose>
<c:when test="${sumAnswer1> 0}">
<fmt:formatNumber var="calAnswer1" value="${sumAnswer1/(sumAnswer1+sumAnswer2)}"/>
</c:when>
</c:choose>
받아 온 값이 int 형이면 연산을 해도 int 이기 때문에
포맷을 소수점있게 바꾼다음 연산해야 소수점연산이 제대로 된다.