[英]How can I convert String to Double without losing precision in Java?
[英]How can I convert string to double in Java Servlet?
我将纬度和经度作为url参数传递给我的Java Servlet。 我想使用休眠将这些经度和纬度存储到我的mySQL数据库中。 要将String转换为Double,我正在使用以下代码,但它给了我nullPointerException。
FileWriter fstream = new FileWriter("out2.txt");
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
String par1 = req.getParameter("param1");
String par2 = req.getParameter("param2");
BufferedWriter out = new BufferedWriter(fstream);
out.append(par1);
out.append(" ");
out.append(par2);
double lat=0.0;
double lon=0.0;
try
{
lat =Double.parseDouble(par1);
}
catch(NumberFormatException e)
{
//not a double
}
try
{
lon= Double.parseDouble(par2);
}
catch(NumberFormatException e)
{
//not a double
}
我的控制台出现以下错误:
SEVERE: Servlet.service() for servlet [org.spark.servlet.PostDataReceiverServlet] in context with path [/HelloServlet] threw exception
java.lang.NullPointerException
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:991)
at java.lang.Double.parseDouble(Double.java:510)
at org.spark.servlet.PostDataReceiverServlet.doGet(PostDataReceiverServlet.java:48)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
如果我删除了两个parseDouble语句,代码工作正常。 @All我很确定par1或par2都不为空。 我刚刚检查了一下,然后在文件中得到以下输出。 28.500788 77.395829
。 这些是我从Android应用发送的坐标。
我很确定par1或par2为空。
像下面的代码片段一样修改您的代码。
public static double parseDoubleSafely(String str) {
double result = 0;
try {
result = Double.parseDouble(str);
} catch (NullPointerException npe) {
//sysout found null
return 0;
} catch (NumberFormatException nfe) {
//sysout NFE
return 0;
}
return result;
}
这两行中的一者或两者最有可能不返回任何值:
String par1 = req.getParameter("param1");
String par2 = req.getParameter("param2");
这就是为什么您会收到一份NPE。
尝试:
System.out.println("par1 = " + par1 + " and par2 = " + par2);
在进行类型转换之前,仅需进行验证即可。
req.getParameter(“ param1”)返回null吗? 您要传递这些参数吗?
解析前检查:
if(par1 != null) lat =Double.parseDouble(par1);
if(par2 != null) lon= Double.parseDouble(par2);
像这样尝试
FileWriter fstream = new FileWriter(new File("out2.txt"),true);
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
String par1 = req.getParameter("param1");
String par2 = req.getParameter("param2");
BufferedWriter out = new BufferedWriter(fstream);
out.append(par1);
out.append(" ");
out.append(par2);
double lat=0.0;
double lon=0.0;
try
{
///////////////////////////null Condition chk within Single try///////////
if ((part1.equals(null)) & (part2.equals(null)))
{
lat =Double.parseDouble(par1);
lon= Double.parseDouble(par2);
}
///////////////////////////null Condition chk within Single try///////////
}
catch(NumberFormatException e)
{
System.out.println("One or both of the value is null");
}
String par1 = (String) req.getParameter("param1");
String par2 = (String) req.getParameter("param2");
进行更改,然后尝试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.