繁体   English   中英

如何在JSP中将String转换为double

[英]How to convert String to double in 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>

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

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

要么

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

从EL规格:

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

编辑:

为了更好的设计,尝试更改数据源但不添加scriptlet。 您可以使用实体(bean)列表。

${item.produtid}
${item.qty*item.rate}
<td><%= Double.valueOf(item[2]) / Double.valueOf(item[1]) %></td>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM