double转String:将数值类型转换为字符串类型。String转double:将字符串类型转换为数值类型。
double 转 String (Double to String)
将 double 转换为 String 有多种方法,每种方法都有其适用场景。

使用 String.valueOf(double d) (推荐)
这是最常用、最简单的方法,它会返回 double 参数的字符串表示形式。
public class DoubleToStringExample {
public static void main(String[] args) {
double myDouble = 123.456;
// 使用 String.valueOf()
String str1 = String.valueOf(myDouble);
System.out.println("使用 String.valueOf(): " + str1);
System.out.println("str1 的类型: " + str1.getClass().getName());
// 结果: 123.456
}
}
使用 Double.toString(double d)
Double 类提供了一个静态方法 toString(),效果与 String.valueOf() 非常相似。
public class DoubleToStringExample {
public static void main(String[] args) {
double myDouble = 789.012;
// 使用 Double.toString()
String str2 = Double.toString(myDouble);
System.out.println("使用 Double.toString(): " + str2);
System.out.println("str2 的类型: " + str2.getClass().getName());
// 结果: 789.012
}
}
使用字符串拼接 (Concatenation)
通过将 double 与一个空字符串 相连接,Java 会自动调用 toString() 方法。
public class DoubleToStringExample {
public static void main(String[] args) {
double myDouble = -3.14159;
// 使用字符串拼接
String str3 = "" + myDouble;
System.out.println("使用字符串拼接: " + str3);
System.out.println("str3 的类型: " + str3.getClass().getName());
// 结果: -3.14159
}
}
注意:这种方法虽然简单,但在性能上不如前两种方法,因为它会创建一个临时的 StringBuilder 对象。

使用 String.format() (控制格式)
当你需要控制输出格式,例如保留指定位数的小数、使用科学计数法等时,String.format() 是最佳选择。
public class DoubleToStringFormatExample {
public static void main(String[] args) {
double myDouble = 123.456789;
// 保留两位小数
String str1 = String.format("%.2f", myDouble);
System.out.println("保留两位小数: " + str1); // 输出: 123.46
// 保留四位小数
String str2 = String.format("%.4f", myDouble);
System.out.println("保留四位小数: " + str2); // 输出: 123.4568
// 使用科学计数法
String str3 = String.format("%e", myDouble);
System.out.println("科学计数法: " + str3); // 输出: 1.234568e+02
// 添加千位分隔符,并保留两位小数
String str4 = String.format("%,.2f", myDouble);
System.out.println("带千位分隔符: " + str4); // 输出: 123.46
}
}
String 转 double (String to Double)
将 String 转换为 double 时,必须确保字符串是一个有效的数字表示,否则会抛出异常。
使用 Double.parseDouble(String s) (推荐)
这是最常用、最直接的方法,它尝试将字符串参数解析为 double。
public class StringToDoubleExample {
public static void main(String[] args) {
String str1 = "123.456";
String str2 = "-78.90";
try {
// 使用 Double.parseDouble()
double d1 = Double.parseDouble(str1);
System.out.println("字符串 '" + str1 + "' 转换为 double: " + d1);
double d2 = Double.parseDouble(str2);
System.out.println("字符串 '" + str2 + "' 转换为 double: " + d2);
} catch (NumberFormatException e) {
System.out.println("无法将字符串转换为 double: " + e.getMessage());
}
}
}
使用 Double.valueOf(String s)
Double.valueOf() 方法返回一个 Double 对象(double 的包装类),如果需要一个原始的 double 类型,需要再进行拆箱(unboxing)操作。
public class StringToDoubleExample {
public static void main(String[] args) {
String str = "314.159";
// 使用 Double.valueOf(),返回的是 Double 对象
Double doubleObject = Double.valueOf(str);
System.out.println("Double 对象: " + doubleObject);
System.out.println("doubleObject 的类型: " + doubleObject.getClass().getName());
// 拆箱,获取原始 double 值
double primitiveDouble = doubleObject; // 或者 double primitiveDouble = doubleObject.doubleValue();
System.out.println("原始 double 值: " + primitiveDouble);
System.out.println("primitiveDouble 的类型: " + ((Object)primitiveDouble).getClass().getName());
}
}
异常处理:NumberFormatException
当字符串不是有效的数字格式时,上述两种方法都会抛出 NumberFormatException,在进行转换时,强烈建议使用 try-catch 块来处理这种潜在的错误。
常见的会导致异常的字符串:
- 空字符串
null- 包含非数字字符的字符串(如
"12.3a4") - 只包含空格的字符串(),除非使用
trim()预处理 - 超出
double范围的字符串(如"1.7976931348623157E308"是Double.MAX_VALUE,再大一点就会异常)
public class StringToDoubleExceptionExample {
public static void main(String[] args) {
String invalidStr1 = "hello";
String invalidStr2 = "";
String validStr = "123.45";
System.out.println("尝试转换无效字符串: '" + invalidStr1 + "'");
try {
Double.parseDouble(invalidStr1);
} catch (NumberFormatException e) {
System.out.println("捕获到异常: " + e.getMessage());
}
System.out.println("\n尝试转换空字符串: '" + invalidStr2 + "'");
try {
Double.parseDouble(invalidStr2);
} catch (NumberFormatException e) {
System.out.println("捕获到异常: " + e.getMessage());
}
System.out.println("\n尝试转换有效字符串: '" + validStr + "'");
try {
double d = Double.parseDouble(validStr);
System.out.println("转换成功! 结果是: " + d);
} catch (NumberFormatException e) {
System.out.println("捕获到异常: " + e.getMessage());
}
}
}
总结与最佳实践
| 转换方向 | 推荐方法 | 说明 |
|---|---|---|
double → String |
String.valueOf(double d) |
最简单、最常用。 |
String.format() |
当需要对格式进行精细控制时(如保留小数位数、科学计数法)。 | |
String → double |
Double.parseDouble(String s) |
最直接,直接返回原始 double 值。 |
Double.valueOf(String s) |
返回 Double 对象,适用于需要对象引用的场景。 |
核心要点:
double转String:通常直接使用String.valueOf()即可,格式化需求用String.format()。String转double:永远使用try-catch块来包裹Double.parseDouble()或Double.valueOf(),以优雅地处理可能发生的NumberFormatException。- 注意空格:如果字符串前后可能有空格(
" 123.45 "),先用str.trim()方法去除首尾空格,再进行转换,这样可以避免不必要的异常。
