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

  1. Double.parseDouble() 将字符串转换为 Double 的方法
  2. Double.valueOf() 将字符串转换为 Double 的方法
  3. DecimalFormat.parse 将一个字符串转换为双数
  4. 将字符串值转换为双精度值 Double 时处理 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

相关文章 - Java Double

  • 如何在 Java 中把双精度数四舍五入到小数点后两位数
  • 相关文章 - Java String

  • 如何在 Java 中检查一个字符串是否是一个数字
  • comments powered by Disqus