5

如果您尝试以下位,您将得到 -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,我用代数证明了它......在这篇文章中,他们指向 IEEE 参考,但我仍然无法解决问题

编辑:感谢您的评论,代码示例中有一个错误。我将四舍五入的值分配给演示变量。而且输出不是0,而是-0,我试了一下

4

3 回答 3

0

在这里远射,但是否因为它将原始 -0.04 解析为字符串?

也许试试这个,我认为这会迫使它评估为一个数字:

<c:set var="demo" value="${-0.04}" />
于 2012-08-30T11:00:03.870 回答
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

好的,这次我想我可以解释一下了:它是 的一个错误(或功能)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 回答