Jstl负零

时间:2012-08-29 18:52:59

标签: java jstl

如果您尝试以下位,您将获得-0

<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,我试过了

3 个答案:

答案 0 :(得分:0)

这里是远景,但是因为它将原始的-0.04解析为字符串吗?

也许试试这个,我认为会强迫它作为数字进行评估:

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

答案 1 :(得分:0)

好的,这次我想我可以解释一下:它是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 % 

答案 2 :(得分: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);