附加两个十进制数字字符串并解析为双精度
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
我想从 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