5

次のビットを試すと、-0 が返されます

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

しかし、0 未満かどうかをテストすると、true と表示されます

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

どうすればこれを回避できますか?意味がないようです.0は-0に等しいです.代数で証明してもらいました...この投稿ではIEEEリファレンスを指していますが、それでも問題を解決できません

編集: コメントをありがとう、コード サンプルに間違いがあります。丸めた値を demo 変数に代入します。そして、出力は0ではなく-0です、試してみました

4

3 に答える 3

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);
于 2012-09-01T14:24:18.627 に答える
0

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

多分これを試してみてください。これにより、強制的に数値として評価されると思います。

<c:set var="demo" value="${-0.04}" />
于 2012-08-30T11:00:03.870 に答える
0

OK、今回は説明できると思います。java.text.DecimalFormatこれは<fmt:formatNumber />、ボンネットの下で使用する のバグ (または機能) です。

これは、私が実験として試した簡単な Beanshell セッションのコピー アンド ペーストです。

BeanShell 2.0b4 - by Pat Niemeyer (pat@pat.net)
bsh % import java.text.*;
bsh % fmt = new DecimalFormat();
bsh % fmt.setMaximumFractionDigits(1);
bsh % print(fmt.format(-0.04d));
-0
bsh % 
于 2012-09-01T13:24:28.400 に答える