Java 追加两个十进制数字字符串并解析为双精度

Java 追加两个十进制数字字符串并解析为双精度,java,numberformatexception,Java,Numberformatexception,我想从字符串中获取结果0.054563,并将其解析为双精度。我目前的尝试看起来像 String number1 = "54,563"; String number2 = "54,563"; String value = "0.0" + number1; String value2 = "0.0" + number2; Double rd1 = Double.parseDouble(value.replaceAll(",",".")); Double rd3 = Double.parseDou

我想从
字符串
中获取结果
0.054563
,并将其解析为
双精度
。我目前的尝试看起来像

String number1 = "54,563";
String number2 = "54,563";

String value = "0.0" + number1;
String value2 = "0.0" + number2;

Double rd1 = Double.parseDouble(value.replaceAll(",","."));
Double rd3 = Double.parseDouble(value2.replaceAll(",","."));
System.out.println(rd1);
但是,当我运行它时,会出现以下错误:

线程“main”java.lang.NumberFormatException中的异常:多个点


是的,有可能。你必须先把数字1改成字符串,然后再做那个+的事情

 String value = "0.0" + Integer.toString(number1);

您会得到异常,因为
将是“0.054563”,并且在
双精度
文本中只允许一个句点,如
0.1
。您的代码
value.replaceAll(“,”,“)
只是将值更改为
0.054.563
,由于这两个句点,该值仍然是非法的。删除前面的逗号

String value = "0.0" + number1.replaceAll(",", "");
然后,您可以使用
Double rd1=Double.parseDouble(value)
而不使用额外的
replaceAll(…)

我进一步强烈建议您以数学方式进行转换,而不是通过
字符串
转换和解析,因为这些都是不必要且成本相当高的操作。

您可以使用正则表达式删除所有非数字。模式
\D
与非数字匹配。如果需要多次使用
模式,则使用
模式会更快。所以你可以这样做

String number1 = "54,563";
Pattern p = Pattern.compile("\\D");
Matcher m = p.matcher(number1);
String number2 = "0.0" + m.replaceAll("");
System.out.println(Double.parseDouble(number2));
如果只需要做一次,可以像

String number1 = "54,563";
String number2 = "0.0" + number1.replaceAll("\\D", "");
System.out.println(Double.parseDouble(number2));
这两种输出都是您想要的

0.054563


这两个都是字符串number1已经是一个字符串了,我把它变成了double,这里double rd1=double.parseDouble(value.replaceAll(“,”,”);哦,我现在明白了。显而易见的是,你为什么不把54563变成一个整数,然后除以1000000呢?谢谢你,这会有用的:D我的数学不是很好:/这个数字从一开始就是一个字符串,因为它是从selenium网页抓取的,但是你的权利就是把它变成一个双精度:)啊,呵呵。是的,双倍,不是整数你到底想做什么?您是否只想解析一个数字,然后除以
1e6
?为什么要使用字符串执行数字操作?这永远不会成功的。可能是重复的