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

Appending two decimal number strings and parse as double

我想从 String 中获取结果 0.054563 并将其解析为 double。我目前的尝试看起来像,

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);

但是,当我 运行 它时,出现以下错误:

Exception in thread "main" java.lang.NumberFormatException: multiple points

是的,这是可能的。您必须先将 number1 更改为字符串,然后再做那件事。

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

你会遇到异常,因为 value 将是“0.054,563”并且 double 文字中只允许一个句点,如 0.1。您的代码 value.replaceAll(",",".") 只是将值更改为 0.054.563,这仍然是非法的,因为有两个句点。去掉 like

前的逗号
String value = "0.0" + number1.replaceAll(",", "");

然后,您可以使用 Double rd1 = Double.parseDouble(value) 而无需额外的 replaceAll(...)

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

您可以使用 正则表达式 删除所有非数字。模式 \D 匹配非数字。如果您需要多次执行此操作,则使用 Pattern 会更快。所以你可以做类似的事情,

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