【问题标题】:JSTL: Absolute value of a BigDecimal (Proper way...)JSTL:BigDecimal 的绝对值(正确的方式......)
【发布时间】:2012-01-21 17:25:30
【问题描述】:

请原谅我今晚放屁,但出于某种原因...这是我现在能想到的最好的解决方案,即现在使用 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>

【问题讨论】:

  • 您的示例看起来像 HTML,其中包含一些 PHP 解析。
  • @Jon 哪个部分看起来像 PHP?在我看来像 JSP。

标签: java jstl bigdecimal absolute


【解决方案1】:

在服务器端使用 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>

【讨论】:

  • 问题是这些对象是生成的,所以我不应该接触服务器端的任何封装方法。不过,这是一个很好的建议,我将不得不进行一些显示更改格式。继续定义一些我自己的标签可能会更容易。
  • 您提供的三元组现在非常完美。昨晚我有点精神错乱。感谢您的帮助!
  • @Vehemon 生成了哪些对象? item对象和JSP之间什么都没有?
  • 我简化了我的例子。 arr 实际上是休眠映射的复杂结构的一部分。我正在使用的对象是来自 middlegen 的存根或它们用于存根/dao 生成的其他工具。我尽量远离他们的休眠包,因为那些家伙有一个快速的保险丝。 ;) 我不想在圣诞节前倾斜它们。我会把它留到 2012 年。
  • @Vehemon 该代码不会存在于该层,它会存在于用作数据和外部 Web/服务接口之间的桥梁的 servlet、控制器等。
【解决方案2】:

假设您正在使用某种 MVC 框架,或者至少有一个 servlet 将数据提供给您的 JSP,我建议您将控制器/servlet 中的 BigDecimals 列表构建为绝对值 - 使用 BigDecimal.abs () - 这样您就不必用这种东西弄乱 JSP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多