尝试在 Java 中将字符串值转换为双精度时出现异常



尝试将字符串转换为双精度时出现以下错误。

For input string: "1,514,230.15"
Exception:
java.lang.NumberFormatException: For input string: "1,514,230.15"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)

这是我正在使用的代码行

testString = "1,514,230.15"
double d= Double.parseDouble(TestString);

有人可以帮助我了解我在这里做错了什么吗?

解决方案 1:

String testString = "1,514,230.15".replace(",", "");
double d = Double.parseDouble(testString);
System.out.println(d);

或解决方案 2:

String input = "1,514,230.15";
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
double result = numberFormat.parse(input).doubleValue();
System.out.println(result);

或解决方案 3:

String testString = "1514230.15";
double d= Double.parseDouble(testString);
System.out.println(d);

输出:

1514230.15

解释:

  1. solution 1使用replace方法来替换所有,replace(",", "");
  2. solution 2使用了数字格式。此类提供用于格式化和分析数字的接口。
  3. solution 3testString中删除了所有,,即String testString = "1514230.15";

您应该使用专门用于此类转换的 NumberFormat#prase。您的输入字符串符合Locale.US的数字格式。

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class Main {
public static void main(String[] args) throws ParseException {
String input = "1,514,230.15";
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
double n = numberFormat.parse(input).doubleValue();
System.out.println(n);
}
}

输出:

1514230.15

最新更新