HOWTO · Java

如何在 Java 中把字符串转换为双数

本文介绍了将字符串转换为双精度值并处理 NumberFormatException 的各种方法。

我们将通过一些简单易懂的例子介绍在 Java 中把给定的字符串转换为双精度 Double 的不同方法。

Double.parseDouble() 将字符串转换为 Double 的方法

在 Java 中,将字符串转换为 double 的最佳和最简单的方法是使用 Double 类的静态方法 parseDouble

Double.parseDouble 返回一个基元类型。

public class Main {
  public static void main(String[] args) {
    String stringValue = "12.34";

    double doubleValue = Double.parseDouble(stringValue);
    System.out.println("Converted value: " + doubleValue);
  }
}

输出:

Converted value: 12.34

它可以是字符串中的负值或正值;该方法将正确地将字符串解析为 double

public class Main {
  public static void main(String[] args) {
    String stringValueNegative = "-12.34";
    String stringValuePositive = "+12.34";
    double doubleValueNegative = Double.parseDouble(stringValueNegative);
    double doubleValuePositive = Double.parseDouble(stringValuePositive);

    System.out.println("Converted negative value: " + doubleValueNegative);
    System.out.println("Converted positive value: " + doubleValuePositive);
  }
}

输出:

Converted negative value: -12.34
Converted positive value: 12.34

Double.valueOf() 将字符串转换为 Double 的方法

当我们需要一个 Double 对象而不是一个基元类型的 double 时,我们可以使用 Double.valueOf 方法从一个字符串中获取一个 double 对象的值。

public class Main {
  public static void main(String[] args) {
    String stringValueNegative = "-12.08d";
    String stringValuePositive = "+12.3400";

    Double doubleValueNegative = Double.valueOf(stringValueNegative);
    Double doubleValuePositive = Double.valueOf(stringValuePositive);
    System.out.println(doubleValueNegative);
    System.out.println(doubleValuePositive);
  }
}

输出:

-12.08
12.34

DecimalFormat.parse 将一个字符串转换为双数

如果我们想要的值是 1,11,111.12d,我们可以使用 DecimalFormat 类将字符串解析为 doubleValue().但由于 DecimalFormat 类可以返回 intbyte 等不同的值,所以需要在 try-catch 块中进行所有操作。

但由于 DecimalFormat 类可以返回不同的值,如 intbyte,所以需要在 try-catch 块中进行所有操作。由于我们希望得到一个 doubleValue,我们必须使用 doubleValue() 方法来明确得到 double 类型。

import java.text.DecimalFormat;
import java.text.ParseException;

public class Main {
  public static void main(String[] args) {
    String stringValue = "1,11,111.12d";

    try {
      double doubleValue = DecimalFormat.getNumberInstance().parse(stringValue).doubleValue();
      System.out.println(doubleValue);

    } catch (ParseException e) {
      e.printStackTrace();
    }
  }
}

输出:

111111.12

将字符串值转换为双精度值 Double 时处理 NumberFormatException 的方法

有时我们可能会得到 NumberFormatException。发生这种情况是因为字符串值不是有效的双精度值。

为了使它更清楚,我们将看到一个简单的例子,它将抛出这个异常。

public class Main {
  public static void main(String[] args) {}
  String stringValue = "1,11";

  double d = Double.parseDouble(stringValue);
  System.out.println(d);
}
}

异常的输出。

Exception in thread "main" java.lang.NumberFormatException : For input string : "1,11" at java.base
    / jdk.internal.math.FloatingDecimal.readJavaFormatString(
                                           FloatingDecimal.java : 2054) at java.base
    / jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java : 110) at java.base
    / java.lang.Double.parseDouble(Double.java : 543) at com.company.Main.main(Main.java : 14)

异常发生的原因是 1,11 不是一个有效的双精度值。解决这个错误的方法是用小数点代替逗号,就像我们下面做的那样。

public class Main {
  public static void main(String[] args) {
    String stringValue = "1,11";

    double d = Double.parseDouble(stringValue.replace(",", "."));
    System.out.println(d);
  }
}

输出:

1.11