请原谅我今晚的大脑放屁,但出于某种原因......这是我现在能用JSTL获得BigDecimal
ABS的最佳解决方案......没有数学技巧除了ABS之外。我必须保持精确度。
我知道有更好的方法来处理它...你的建议是什么?任何谷歌搜索都会提取formatNumber
的帮助并处理delta / negatives的货币。
<c:forEach items="${arr}" var="cursor" varStatus="itemsRow">
<c:choose>
<c:when test="${cursor.value < 0}">
<td width="75px" align="right">
<fmt_rt:formatNumber pattern="#,###,###,###.##" value="${cursor.value * -1}" minFractionDigits="2"/></td>
</c:when>
<c:otherwise>
<td width="75px" align="right">
<fmt_rt:formatNumber pattern="#,###,###,###.##" value="${cursor.value}" minFractionDigits="2"/></td>
</c:otherwise>
</c:choose>
</c:forEach>
答案 0 :(得分:2)
在服务器端使用BigDecimal.abs();不要在JSP中做这种工作。
如果必须,请将其包装在基于JSP的自定义标记中,或者创建一个JSTL函数包装来处理abs。
此外,重构,类似于此(完全未经测试),如果您无法在适当的地方完成工作:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${arr}" var="cursor" varStatus="itemsRow">
<c:set name="val" value="${cursor.value < 0 ? cursor.value * -1 : cursor.value}"/>
<td width="75px" align="right">
<fmt_rt:formatNumber pattern="#,###,###,###.##" value="${val}" minFractionDigits="2"/>
</td>
</c:forEach>
答案 1 :(得分:1)
假设您正在使用某种MVC框架,或者至少有一个servlet将数据提供给JSP,我建议将控制器/ servlet中的BigDecimals列表构建为绝对值 - 使用BigDecimal.abs () - 这样你就不必用这种东西来破坏JSP。