如果您尝试以下位,您将获得-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,我试过了
答案 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);