JSTL:BigDecimal的绝对值(正确方法......)

时间:2011-12-16 04:43:45

标签: java jstl bigdecimal absolute

请原谅我今晚的大脑放屁,但出于某种原因......这是我现在能用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>

2 个答案:

答案 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。