簡體   English   中英

JSTL:BigDecimal的絕對值(正確的方法……)

[英]JSTL: Absolute value of a BigDecimal (Proper way…)

請原諒我今晚參加腦部放屁活動,但是出於某種原因……這是我現在可以拿出帶有JSTL的BigDecimal的ABS的最佳解決方案……ABS之外也沒有數學技巧。 我必須保持精確。

我知道有更好的方法來處理它...你的建議是什么? 任何谷歌搜索都在獲取有關formatNumber幫助,並處理增量/負數的貨幣。

<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>

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

假設您正在使用某種MVC框架,或者至少有一個servlet將數據饋送到您的JSP,我建議在控制器/ servlet中將BigDecimals列表構建為絕對值-使用BigDecimal.abs()-所以你不必用這種東西搞砸JSP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM