2012-08-29 13 views
5

次のビットをしようとした場合、あなたが-0JSTL負のゼロ

<c:set var="demo" value="-0.04" /> 
<fmt:formatNumber maxFractionDigits="1" value="${demo}" var="demo" /> 

を取得しますが、0未満の、それは本当言うならば、あなたがテストした場合

<c:if test="${demo < 0.00}">...</c:if> 

がどのように私はこれを回避行くことができますか?それは意味をなさないと思う0は0と等しい、私は代数で証明していた... this post彼らはIEEEの参照を指していますが、それでも私は問題を解決できません

編集:ありがとうコメントのために、コードサンプルに間違いがあります。デモ変数に丸められた値を割り当てます。出力は0ではありませんが、-0、試しました

+0

問題点を教えてください。変数に-0.04の値を代入した後、小数点以下1桁に丸めて出力します(0.0を出力します)。次に、元の値-0.04が0.00未満であるかどうかをテストします。 – patros

+1

コードに間違いがあり、修正しました。そして、それは0を出力しません、バンド名として '負のゼロ'のために-0 – Hartimer

+1

Dibsを出力してください! –

答えて

0

ここでロングショットですが元の-0.04を文字列として解析していますか?

たぶん私は数として評価することを強制するとは思われ、この、試してみてください。

<c:set var="demo" value="${-0.04}" /> 
+1

返事をありがとう。それは違いはありません、それはまだ生成します-0 – Hartimer

0

OK、私はそれを説明することができると思います。この時間:それはjava.text.DecimalFormatのバグ(または機能)、ですがどのような<fmt:formatNumber />ボンネットの下で使用します。ここで

は、私は実験として試み迅速BeanShellのセッションのcopy'n'pasteです:

BeanShell 2.0b4 - by Pat Niemeyer ([email protected]) 
bsh % import java.text.*; 
bsh % fmt = new DecimalFormat(); 
bsh % fmt.setMaximumFractionDigits(1); 
bsh % print(fmt.format(-0.04d)); 
-0 
bsh % 
0

あなたはこれを補正するタグの書式設定、独自の番号を書くことができます。

// Read these values from tag attributes 
String pattern = "0"; 
Double myNumber = -0.04d; 

// Create a decimal format with correct rounding 
DecimalFormat df = new DecimalFormat(pattern); 
df.setRoundingMode(RoundingMode.HALF_UP); 

// Format in two steps to compensate for '-0' 
String temp = df.format(myNumber + 1); 
String formatted = df.format(Double.valueOf(temp) - 1); 
関連する問題