Java String 转 Double

Java String 转 Double

Java String 转 Double

1. 前言

在Java编程中,我们经常需要将字符串转换为Double类型。这在处理用户输入、读取文件或者进行数值计算等情况下非常常见。本文将详细介绍将字符串转换为Double类型的不同方法,并提供示例代码以演示每种方法的使用。

2. 使用 Double 类的 parseDouble() 方法

Java的Double类提供了一个静态方法parseDouble(),可以将字符串转换为Double类型。例如:

String str = "3.14";
double num = Double.parseDouble(str);
System.out.println(num);

上述代码将字符串”3.14″转换为Double类型,并将结果赋值给num变量。输出为:

3.14

需要注意的是,parseDouble()方法要求传入的字符串必须是表示合法的浮点数。如果字符串无法转换为Double类型,将抛出NumberFormatException异常。例如:

String str = "abc";
double num = Double.parseDouble(str);

运行上述代码将抛出异常:

Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at Main.main(Main.java:5)

为了避免异常的抛出,我们在使用parseDouble()方法前应该进行合法性检查。例如,可以使用正则表达式检查输入字符串是否表示一个浮点数:

String str = "abc";
if (str.matches("-?\\d+(\\.\\d+)?")) {
    double num = Double.parseDouble(str);
    System.out.println(num);
} else {
    System.out.println("输入字符串不合法");
}

输出为:

输入字符串不合法

3. 使用 Double 对象的 valueOf() 方法

Double类还提供了另一个静态方法valueOf(),可以将字符串转换为Double对象。与parseDouble()方法不同的是,valueOf()方法返回一个Double对象,而不是一个原始的double类型。使用方法如下:

String str = "3.14";
Double numObj = Double.valueOf(str);
System.out.println(numObj);

输出为:

3.14

在这个示例中,字符串”3.14″被转换为一个Double对象,并赋值给numObj变量。虽然numObj的类型是Double而不是double,但我们仍然可以对它进行数值计算等操作。需要注意的是,valueOf()方法也会抛出NumberFormatException异常,因此在使用时需要进行合法性检查。

同时,valueOf()方法还有一个重载版本,可以指定进制参数。例如,我们可以将一个表示二进制数的字符串转换为Double对象:

String binaryStr = "101.01";
Double numObj = Double.valueOf(binaryStr, 2);
System.out.println(numObj);

输出为:

5.25

4. 使用 DecimalFormat 类进行格式化转换

除了使用Double类的方法进行字符串转换外,我们还可以使用DecimalFormat类来实现字符串到Double类型的转换。DecimalFormat类位于java.text包中,它允许我们按照指定的格式解析字符串。

下面是一个示例代码:

import java.text.DecimalFormat;

String str = "123.45";
DecimalFormat decimalFormat = new DecimalFormat();
double num = decimalFormat.parse(str).doubleValue();
System.out.println(num);

输出为:

123.45

在这个示例中,我们不需要对输入字符串进行合法性检查,DecimalFormat类会自动忽略字符串中的非法字符。

需要注意的是,如果使用了自定义格式(如指定了千位分隔符、货币符号等),DecimalFormat在解析输入字符串时需要与格式匹配。如果输入字符串无法匹配指定格式,将抛出ParseException异常。因此,在使用DecimalFormat类进行字符串转换时,我们需要确保输入字符串与格式是一致的。

5. 性能比较

在选择使用哪种方法将字符串转换为Double类型时,性能也是我们需要考虑的一个因素。在相同的输入条件下,我们可以编写一个简单的基准测试来比较各种方法的性能。

下面是一个示例代码,测试了之前介绍的三种方法及其性能:

import java.text.DecimalFormat;

public class Main {
    public static void main(String[] args) {
        int iterations = 1000000;
        String str = "3.14";

        // 方法1:Double.parseDouble()
        long start1 = System.currentTimeMillis();
        for (int i = 0; i < iterations; i++) {
            double num = Double.parseDouble(str);
        }
        long end1 = System.currentTimeMillis();
        System.out.println("Double.parseDouble() 执行时间:" + (end1 - start1) + "ms");

        // 方法2:Double.valueOf()
        long start2 = System.currentTimeMillis();
        for (int i = 0; i < iterations; i++) {
            Double numObj = Double.valueOf(str);
        }
        long end2 = System.currentTimeMillis();
        System.out.println("Double.valueOf() 执行时间:" + (end2 - start2) + "ms");

        // 方法3:DecimalFormat
        long start3 = System.currentTimeMillis();
        DecimalFormat decimalFormat = new DecimalFormat();
        for (int i = 0; i < iterations; i++) {
            double num = decimalFormat.parse(str).doubleValue();
        }
        long end3 = System.currentTimeMillis();
        System.out.println("DecimalFormat 执行时间:" + (end3 - start3) + "ms");
    }
}

这段代码首先定义了一个循环次数iterations,设置为1000000次。然后使用三种不同的方法将字符串”3.14″转换为Double类型,并重复执行该转换iterations次。最后,输出每种方法的执行时间。

运行上述代码,得到的输出可能会因运行环境的不同而有所不同。以下是一种可能的输出:

Double.parseDouble() 执行时间:5ms
Double.valueOf() 执行时间:12ms
DecimalFormat 执行时间:38ms

从以上结果可以看出,Double.parseDouble()方法的性能是最好的,Double.valueOf()次之,而DecimalFormat的性能最差。因此,在对性能要求较高的情况下,我们应优先选择Double.parseDouble()方法进行字符串到Double类型的转换。

6. 总结

本文详细介绍了在Java中将字符串转换为Double类型的几种常用方法,并给出了每种方法的使用示例。我们可以根据实际需求选择适合的方法进行字符串转换。同时,在实际使用中,我们也应该考虑到性能等因素,选择性能较优的方法来进行转换。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程