杰瑞科技汇

Java中Double转String有哪些方法?

主要方法概览

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

String.valueOf(double d) - 最常用、最简单

这是最直接、最常用的方法,它会将 double 的标准十进制表示形式转换成 String

Java中Double转String有哪些方法?-图1
(图片来源网络,侵删)

代码示例:

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 参数时几乎完全相同。

代码示例:

Java中Double转String有哪些方法?-图2
(图片来源网络,侵删)
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

代码示例:

Java中Double转String有哪些方法?-图3
(图片来源网络,侵删)
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 - 更专业的数字格式化

DecimalFormatjava.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() 语法简洁,功能强大,无需创建额外对象。
**需要复杂格式(千分位、货币
分享:
扫描分享到社交APP
上一篇
下一篇