【问题标题】:issue with format tag of JSTL in JSP PageJSP 页面中 JSTL 的格式标记问题
【发布时间】:2015-03-19 04:22:25
【问题描述】:

我的 JSP 页面中有以下代码-

<fmt:formatNumber value="${(r.p51_vmeset-row.p51_vmeset)}" maxFractionDigits="2" minIntegerDigits="2"  var="mm" />
<td style="${mm eq 0 ? 'background-color: lime':'background-color:  pink'}">
<c:out value="${mm}" ></c:out></td>

通过此代码,我想显示无论减法的结果如何,如果小数部分在前两位数字中显示零,在整数部分显示零,那么结果必须存储在变量 mm 中,并且石灰颜色应显示为 maxFractionDigits ="2" minIntegerDigits="2" 等于零的减法。

但显示的是,如果结果为零,则只显示石灰。但是 我希望如果整数部分和小数部分最多两位数为零,那么石灰色也应显示为列的背景.

示例 -

假设我的 r.p51_vmeset 值为 -0.4000977 和 row.p51_vmeset 值 是 -0.40009767 。然后两个值的减法将给出 -0.0000003 但我希望将其修剪为 00.00,并且颜色应该是石灰而不是粉红色。

我尝试将我的结果打印为-

 <fmt:formatNumber value="${(r.p99_vmeset-row.p99_vmeset)}" maxFractionDigits="2" minIntegerDigits="2"  var="mm" />
     **<c:out value="${mm}"></c:out>**
     <td style="${mm eq 0 ? 'background-color: lime':'background-color: pink'}" >
      <c:out value="${mm}" ></c:out></td>

c:out 显示值 00.00 但是当我比较它时,如果 mm 等于零,背景颜色应该是石灰,但它显示的是粉红色。Y??

【问题讨论】:

  • 举个例子,说明你想在哪个号码上涂上青柠色
  • @BrijeshBhatt,我已经编辑了我的问题。

标签: java jsp formatting jstl


【解决方案1】:

您可以使用以下方法将您的数字格式化为整数:

<fmt:formatNumber var="i" maxIntegerDigits="3" maxFractionDigits="0"
                   type="number" value="${mm}" />

然后在这里比较:

<td style="${i eq 0 ? 'background-color: lime':'background-color:  pink'}">

【讨论】:

  • 我不希望它把它转换成整数。但想将其修剪为以下格式##.##,如果此格式的值为 00.00,则应该存在石灰色。
  • 是的。只有在减法并将值修剪为###.## 结果为 00.00 时,颜色才会为石灰。 00
【解决方案2】:

如果你想为任何减法值设置格式##.##,试试这个:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

//use pattern="00.00"(0 represents a digit), instead of max/min
<fmt:formatNumber value="${(r.p51_vmeset-row.p51_vmeset)}" pattern="00.00"  var="mm" />  

//remove "-" in case it's negative value
<c:set var="mm2" value="${fn:replace(mm, '-', '')}" />

//compare it with string '00.00', not number
<td style="${(mm2 eq '00.00') ? 'background-color: lime':'background-color:  pink'}">
<c:out value="${mm2}" ></c:out></td>

这应该可以,我刚刚测试过。如果可行,请投票给我。

【讨论】:

  • 我希望我的整数有任何值,但小数必须最多为两位数,即减法后的值可以是 ##.## 或 ###.## 或 ####.# #.没有负号的问题,它可以来。根据我的要求,我无法比较 (mm2 eq '00.00'),因为它可以是 00.00 或 000.00。
  • 那你为什么设置 minIntegerDigits="2"?当您将其与 0 进行比较时,这会导致问题,它将被视为字符串“00.xx”,而不是数字。我想你可能有像 132.22、0.34、0.00 这样的值,你能解释一下在什么情况下你想要 00.## 或 000.##,或 00000.##?很难理解。
  • 我有 0.45 和 45.78 和 345.00 格式的值。好吧,我不会设置 minIntegerDigits="2"。
  • 删除 min IntegerDigits 后,我也没有得到所需的结果。
  • 试试这个:*100,然后在输出前/100(如果需要):&lt;fmt:formatNumber value="${(r.p51_vmeset-row.p51_vmeset)*100}" maxFractionDigits="0" var="mm" /&gt;,然后将其与 100 进行比较(比较十进制数是不好的做法):&lt;td style="${mm eq 100 ? 'background-color: lime':'background-color: pink'}"&gt;。在输出之前,根据您的要求将其格式化为 /100。
猜你喜欢
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多