我在JPS中的表格中提取了一些结果:
<tr>
<td>${item[0]}</td>
<td>${item[5]}</td>
<td>${item[1]}</td>
<td>${item[2]}</td>
<td>${item[5]}</td>
<td>${item[6]}</td>
</tr>
现在,我想再添加一列,其中${item[2]}
除以${item[1]}
。但这些是字符串如何将结果转换为double?
修改
到目前为止,在两个答案中我都遇到编译错误,导致:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 30 in the jsp file: /WEB-INF/views/home.jsp
Syntax error, insert ")" to complete MethodInvocation
27: <td>${item[5]}</td>
28: <td>${item[1]}</td>
29: <td>${item[2]}</td>
30: <td><%= Double.parseDouble(${item[2]})/Double.parseDouble(${item[1]}) %> </td>
31: <td>${item[5]}</td>
32: <td>${item[6]}</td>
33: </tr>
更多代码:
<table width="100%">
<c:forEach var="item" items="${myList}">
<tr>
<td>${item[0]}</td>
<td>${item[5]}</td>
<td>${item[1]}</td>
<td>${item[2]}</td>
<td><%= Double.valueOf(item[2]) / Double.valueOf(item[1]) %></td>
<td>${item[5]}</td>
<td>${item[6]}</td>
</tr>
</c:forEach>
</table>
答案 0 :(得分:1)
不要担心类型转换如果表达式${item[2]}
或${item[1]}
包含数值(数字)。只需使用,
${item[2]/item[1]}
或
<c:catch>
${items[0]/items[1]}
</c:catch>
每个表达式都在期望类型的上下文中进行评估。该 表达式评估的结果可能与预期的类型不匹配 确切地说,转换将按照强制规则进行。
编辑:
为了更好的设计,请尝试更改数据源,但不要添加scriptlet。您可以使用实体(bean)列表。
${item.produtid}
${item.qty*item.rate}
答案 1 :(得分:0)
<td><%= Double.valueOf(item[2]) / Double.valueOf(item[1]) %></td>
答案 2 :(得分:0)
我在&lt; %%&gt;中设置了JSP顶部的值。或者在控制器(servlet)中:
String[] item = new String[1]; /* Assume a standard array */
String sOne = null, sTwo = null;
double dOne = 0.0d, dTwo = 0.0d, dPercent;
try {
sOne = item[1];
sTwo = item[2];
dOne = Double.parseDouble(item[1]);
dTwo = Double.parseDouble(item[2]);
/* Making an assumption on the *100 here.... */
dPercent = (dTwo/dOne)*100;
} catch(NumberFormatException nfe) {
/* Handle the NFE here...*/
} catch (NullPointerException npe) {
/* Handle the NPE here...*/
} catch (Exception e) {
/* Handle any other exception here...*/
}
预处理JSP顶部或控制器中的数据可使JSP更清洁:
<tr>
<td><%=item[0]%></td>
<td><%=item[5]%></td>
<td><%=item[1]%></td>
<td><%=item[2]%></td>
<td><%=item[5]%></td>
<td><%=item[6]%></td>
<td><%=dPercent%></td>
</tr>
请注意,Double.parseDouble()和Double.valueOf()之间的区别是返回类型。 .valueOf()返回一个Double对象,而.parseDouble()返回一个double类型。
有些java程序员可以互换地使用'double'和Double,但是我来自'避开对象,使用原始类型!'的阵营。 Double不仅使用了比double更多的内存,而且不知道两者之间的差异会导致一些(主要)混淆。有关int vs Integer示例,请参阅此链接: http://illegalargumentexception.blogspot.com/2008/08/java-int-versus-integer.html