主要方法概览
| 方法 | 描述 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|---|
String.valueOf(double d) |
静态方法,将 double 转换为 String。 |
简单、直接,是官方推荐的方式之一。 | 对于科学计数法或需要特定格式的场景不够灵活。 | 日常开发,快速转换。 |
Double.toString(double d) |
Double 类的静态方法,功能与 valueOf 基本相同。 |
与 valueOf 功能一致。 |
同上。 | 与 valueOf 类似,日常开发。 |
String.format() |
使用格式化字符串,非常灵活,可以控制小数位数、宽度、对齐等。 | 灵活性极高,可以精确控制输出格式。 | 语法稍显复杂,需要学习格式化占位符。 | 需要格式化输出的场景,如保留两位小数、科学计数法等。 |
DecimalFormat |
专门用于格式化数字的类,功能强大。 | 功能强大,可以定义复杂的数字模式(如千位分隔符)。 | 需要创建对象,代码稍多。 | 需要复杂数字格式化的场景,如货币、百分比、千位分隔符。 |
StringBuilder.append() |
通过 StringBuilder 的 append 方法间接转换。 |
在循环中拼接大量字符串时性能更好。 | 代码不够直观,仅为转换而用此方法是小题大做。 | 在需要拼接多种数据类型(包括 double)到 StringBuilder 中时。 |
String.valueOf(double d) - 最常用、最简单
这是最直接、最常用的方法,它会将 double 的标准十进制表示形式转换成 String。

代码示例:
public class DoubleToStringExample {
public static void main(String[] args) {
double number = 123.456;
// 使用 String.valueOf
String str1 = String.valueOf(number);
System.out.println("使用 String.valueOf: " + str1);
System.out.println("str1 的类型: " + str1.getClass().getSimpleName());
// 处理科学计数法
double sciNumber = 1.23e5; // 123000.0
String str2 = String.valueOf(sciNumber);
System.out.println("科学计数法转换: " + str2);
}
}
输出:
使用 String.valueOf: 123.456
str1 的类型: String
科学计数法转换: 123000.0
Double.toString(double d) - 功能类似
Double 类本身也提供了一个静态的 toString 方法,其行为与 String.valueOf 对于 double 参数时几乎完全相同。
代码示例:

public class DoubleToStringExample {
public static void main(String[] args) {
double number = -789.012;
// 使用 Double.toString
String str = Double.toString(number);
System.out.println("使用 Double.toString: " + str);
}
}
输出:
使用 Double.toString: -789.012
String.format() - 格式化输出的利器
当你需要控制 double 转换后的格式时,String.format() 是最佳选择,它使用类似于 C 语言的 printf 格式化语法。
常用格式化占位符:
%f: 用于十进制浮点数。%.nf: 保留n位小数。%e: 使用科学计数法表示。%g: 根据数值大小自动选择%f或%e。
代码示例:

public class DoubleToStringFormatExample {
public static void main(String[] args) {
double number = 3.14159265359;
// 1. 保留两位小数
String str1 = String.format("%.2f", number);
System.out.println("保留两位小数: " + str1); // 输出: 3.14
// 2. 保留四位小数
String str2 = String.format("%.4f", number);
System.out.println("保留四位小数: " + str2); // 输出: 3.1416
// 3. 使用科学计数法
String str3 = String.format("%e", number);
System.out.println("科学计数法: " + str3); // 输出: 3.141593e+00
// 4. 设置总宽度,右对齐(默认)
String str4 = String.format("%10.2f", number);
System.out.println("宽度为10,右对齐: '" + str4 + "'"); // 输出: ' 3.14'
// 5. 设置总宽度,左对齐
String str5 = String.format("%-10.2f", number);
System.out.println("宽度为10,左对齐: '" + str5 + "'"); // 输出: '3.14 '
}
}
输出:
保留两位小数: 3.14
保留四位小数: 3.1416
科学计数法: 3.141593e+00
宽度为10,右对齐: ' 3.14'
宽度为10,左对齐: '3.14 '
DecimalFormat - 更专业的数字格式化
DecimalFormat 是 java.text 包中的一个类,它允许你通过模式字符串来定义非常复杂的数字格式,比如添加千位分隔符、货币符号等。
代码示例:
import java.text.DecimalFormat;
public class DoubleToStringDecimalFormatExample {
public static void main(String[] args) {
double number = 1234567.891;
// 1. 保留两位小数
DecimalFormat df1 = new DecimalFormat("0.00");
String str1 = df1.format(number);
System.out.println("保留两位小数: " + str1); // 输出: 1234567.89
// 2. 添加千位分隔符
DecimalFormat df2 = new DecimalFormat("#,###.##");
String str2 = df2.format(number);
System.out.println("千位分隔符: " + str2); // 输出: 1,234,567.89
// 3. 添加货币符号
DecimalFormat df3 = new DecimalFormat("$#,###,##0.00");
String str3 = df3.format(number);
System.out.println("货币格式: " + str3); // 输出: $1,234,567.89
// 4. 百分比格式
double percentage = 0.789;
DecimalFormat df4 = new DecimalFormat("0.00%");
String str4 = df4.format(percentage);
System.out.println("百分比格式: " + str4); // 输出: 78.90%
}
}
输出:
保留两位小数: 1234567.89
千位分隔符: 1,234,567.89
货币格式: $1,234,567.89
百分比格式: 78.90%
StringBuilder.append(double d) - 拼接场景
当你需要在一个 StringBuilder 对象中构建一个复杂的字符串,并且其中包含一个 double 时,直接调用 append 方法是最方便的。
代码示例:
public class DoubleToStringStringBuilderExample {
public static void main(String[] args) {
double price = 19.99;
int quantity = 10;
String productName = "Java Book";
StringBuilder sb = new StringBuilder();
sb.append("产品: ")
.append(productName)
.append(", 数量: ")
.append(quantity)
.append(", 总价: ")
.append(price * quantity); // 直接 append double
String result = sb.toString();
System.out.println(result);
}
}
输出:
产品: Java Book, 数量: 10, 总价: 199.9
总结与最佳实践
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 简单、直接的转换 | String.valueOf(double) 或 Double.toString(double) |
代码最简洁,可读性高,是标准做法。 |
| 需要控制小数位数或宽度 | String.format() |
语法简洁,功能强大,无需创建额外对象。 |
| **需要复杂格式(千分位、货币 |
