如何在JSP中将String转换为double

时间:2011-09-28 11:07:33

标签: java jsp

我在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>

3 个答案:

答案 0 :(得分:1)

不要担心类型转换如果表达式${item[2]}${item[1]}包含数值(数字)。只需使用,

${item[2]/item[1]}

<c:catch>
 ${items[0]/items[1]}
</c:catch>

From EL Specification:

  

每个表达式都在期望类型的上下文中进行评估。该   表达式评估的结果可能与预期的类型不匹配   确切地说,转换将按照强制规则进行。

编辑:

为了更好的设计,请尝试更改数据源,但不要添加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