如题:
inputNumber.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib tagdir="/WEB-INF/tags" prefix="computer"%> <html> <head> <title>运算器</title> </head> <body> <h3>输入运算数,选择运算符号:</h3> <form action="" name="form" method="post"> <input type="text" name="numberOne" size="6" /> <Select name="operator"> <option value="+" >+</option> <option value="-" >-</option> <option value="*" >*</option> <option value="/" >/</option> </Select> <%--Select下拉表单,option表示表中的元素--%> <input type="text" name="numberTwo" size="6" /> <br> <input type="submit" value="Enter" name="submit"> </form> <% String a = request.getParameter("numberOne"); String b = request.getParameter("numberTwo"); String operator = request.getParameter("operator"); if(a==null||b==null){ a=""; b=""; } if(a.length()>0&&b.length()>0){ %> <computer:Computer numberOne="<%=a%>" numberTwo="<%=b%>" operator="<%=operator%>"/> 计算结果:<%=a%><%=operator%><%=b%>=<%=result%> <% } %> </body> </html>
Computer.tag
<%@tag pageEncoding="UTF-8" %> <%@attribute name="numberOne" required="true" %> <%@attribute name="numberTwo" required="true" %> <%@attribute name="operator" required="true" %> <%@variable name-given="result" scope="AT_END" %> <% try { double a = Double.parseDouble(numberOne); double b = Double.parseDouble(numberTwo); double r = 0; if (operator.equals("+")) { r = a + b; } else if (operator.equals("-")){ r = a - b; }else if (operator.equals("*")){ r=a*b; }else if (operator.equals("/")) { r = a / b; } jspContext.setAttribute("result",String.valueOf(r)); }catch(Exception e){ jspContext.setAttribute("result","发生异常:"+e); } %>
编译运行输入1,1
会出现:
计算结果:ï¼+ï¼=发生异常:java.lang.NumberFormatException: For input string: "ï¼"
如上我们可以知道,这是一个数字格式异常
我们尝试使用trim()方法:
这个方法的作用是:去掉字符串两端多余的空格
double a = Double.parseDouble(numberOne.trim()); double b = Double.parseDouble(numberTwo.trim());
但是结果并没有解决问题。。。。
突然我注意到了一个问题,搜狗的拼音输入法输出的数字与英文输入法的字体并不一致,切换输入法后运行通过,没有出现异常。ps:本人用的是ubuntu16.04 64bit
结论:如果出现numberformatexception异常,不妨检查一下自己的输入法是否出错