2011-12-16 11 views
1

今夜は脳のおならのために私を許してください...何らかの理由で...これは私が今ではABSを得るのにもってくる最善の解決策ですBigDecimal今はJSTLで... ABSの外でも数学のトリックはありません。私は精度を維持する必要があります。JSTL:BigDecimalの絶対値(適切な方法...)

私はそれを処理するより良い方法があると知っています...あなたの提案は何ですか?どんなGoogle検索でもformatNumberのヘルプを引き出し、デルタ/ネガティブの通貨を処理しています。あなたはMVCフレームワークのいくつかの並べ替えを使用して、または少なくともあなたのJSPにデータを供給するサーブレットを持っていると仮定すると

<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

あなたのサンプルがで解析いくつかのPHPとHTMLのように見えます – Jon

+2

@ジョンどの。一部はPHPのように見える? JSPのように見えます。 –

答えて

2

サーバー側でBigDecimal.abs()を使用します。 JSPでこの種の作業をしないでください。

にする必要がある場合は、JSPベースのカスタムタグでラップするか、absを処理するJSTL関数ラッパーを作成します。また

、これと同様のリファクタリング、(完全にテストされていない)、あなたは適切な場所で作業を行うことができない場合:

<%@ 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> 
+0

問題は、これらのオブジェクトが生成されるため、サーバー側のカプセル化メソッドに触れてはいけないということです。しかし、これは素晴らしい提案ですが、ディスプレイの一部を変更して書式を変更する必要があります。私のタグのいくつかを定義して定義する方が簡単かもしれません。 – Vehemon

+0

あなたが提供した三元のセットは今のところ完璧です。私は昨夜、少しばかげていた。助けてくれてありがとう! – Vehemon

+0

@Vehemonどのオブジェクトが生成されますか?アイテムオブジェクトとJSPの間には何もありません。 –

1

、私は絶対値としてコントローラ/サーブレットでのBigDecimalのあなたのリストを構築することをお勧めしたいです - BigDecimal.abs()を使用してください。そうすれば、JSPをこの種のものに混乱させる必要はありません。