杰瑞科技汇

java double转 string

核心方法

主要有三种核心方法可以实现转换:

java double转 string-图1
(图片来源网络,侵删)
  1. String.valueOf(double d) - 最常用、最推荐的方法。
  2. Double.toString(double d) - 与 String.valueOf 在底层实现上几乎完全相同。
  3. Double 对象的 toString() 方法 - 需要先创建 Double 包装对象,不推荐用于简单转换。

还有使用 String.format()DecimalFormat 的方法,它们更强大,用于格式化输出。


String.valueOf(double d) - 最推荐

这是最直接、最常用的方法,它是一个静态方法,可以直接将基本数据类型 double 转换为 String

特点:

  • 简单高效:语法简洁,性能良好。
  • 标准转换:遵循 Java 规范,将 double 的标准文本表示形式转换为字符串。
  • 处理 NaN 和无穷大:能正确处理 Double.NaN (Not a Number) 和 Double.POSITIVE_INFINITY / Double.NEGATIVE_INFINITY

代码示例:

java double转 string-图2
(图片来源网络,侵删)
public class DoubleToStringExample {
    public static void main(String[] args) {
        double number1 = 123.456;
        double number2 = -789.012;
        double zero = 0.0;
        double nan = Double.NaN;     // Not a Number
        double infinity = Double.POSITIVE_INFINITY;
        // 使用 String.valueOf()
        String str1 = String.valueOf(number1);
        String str2 = String.valueOf(number2);
        String str3 = String.valueOf(zero);
        String str4 = String.valueOf(nan);
        String str5 = String.valueOf(infinity);
        System.out.println("str1: " + str1);      // 输出: str1: 123.456
        System.out.println("str2: " + str2);      // 输出: str2: -789.012
        System.out.println("str3: " + str3);      // 输出: str3: 0.0
        System.out.println("str4: " + str4);      // 输出: str4: NaN
        System.out.println("str5: " + str5);      // 输出: str5: Infinity
    }
}

Double.toString(double d) - 与 valueOf 等价

Double 类中提供了一个静态的 toString 方法,其行为与 String.valueOf(double d) 几乎完全相同。

特点:

  • 功能相同:在功能上是 String.valueOf 的一个直接代理。
  • 可读性:对于初学者来说,Double.toString 可能看起来更直观,因为它明确指出了是 Double 类型在转换。

代码示例:

public class DoubleToStringExample2 {
    public static void main(String[] args) {
        double number = 3.14159;
        String str = Double.toString(number);
        System.out.println("str: " + str); // 输出: str: 3.14159
    }
}

为什么不推荐使用 new Double(d).toString() 虽然 Double 类的实例方法 toString() 也能工作,但它需要先创建一个 Double 对象,这会带来不必要的内存开销和性能损耗,对于简单的类型转换,应该始终优先使用静态方法 String.valueOfDouble.toString

java double转 string-图3
(图片来源网络,侵删)
// 不推荐的方式
double number = 123.45;
String badStr = new Double(number).toString(); // 创建了不必要的对象

String.format() - 强大的格式化控制

当你需要以特定格式(如保留几位小数、科学计数法、千位分隔符等)转换 double 时,String.format() 是最佳选择。

特点:

  • 格式化灵活:可以使用格式说明符(如 %.2f)来精确控制输出格式。
  • 语法类似 C 的 printf:对于有 C/C++ 经验的开发者来说很熟悉。

常用格式说明符:

  • %f:十进制浮点数。
  • %.nf:保留 n 位小数的十进制浮点数。
  • %e:科学计数法表示。
  • %g:根据值的大小自动选择 %f%e

代码示例:

public class DoubleToStringFormatExample {
    public static void main(String[] args) {
        double price = 12345.6789;
        // 1. 保留两位小数(四舍五入)
        String formattedPrice1 = String.format("%.2f", price);
        System.out.println("保留两位小数: " + formattedPrice1); // 输出: 保留两位小数: 12345.68
        // 2. 保留四位小数
        String formattedPrice2 = String.format("%.4f", price);
        System.out.println("保留四位小数: " + formattedPrice2); // 输出: 保留四位小数: 12345.6789
        // 3. 使用千位分隔符
        String formattedPrice3 = String.format(",.2f", price);
        System.out.println("带千位分隔符: " + formattedPrice3); // 输出: 带千位分隔符: 12,345.68
        // 4. 科学计数法
        double smallNumber = 0.000012345;
        String scientific = String.format("%.2e", smallNumber);
        System.out.println("科学计数法: " + scientific); // 输出: 科学计数法: 1.23e-05
    }
}

DecimalFormat - 专业的数字格式化

DecimalFormatjava.text 包中的一个类,它提供了比 String.format 更丰富、更专业的数字格式化功能,特别是处理本地化(如不同国家的货币符号、小数点符号等)时。

特点:

  • 模式化:通过定义模式字符串(如 "#,##0.00")来格式化数字。
  • 本地化支持:可以与 NumberFormatLocale 结合使用,实现国际化。
  • 灵活性高:可以定义非常复杂的数字格式。

代码示例:

import java.text.DecimalFormat;
public class DoubleToStringDecimalFormatExample {
    public static void main(String[] args) {
        double number = 1234567.891;
        // 创建格式化器模式
        // #: 数字,不强制显示0
        // 0: 数字,不足时补0
        // ,: 千位分隔符
        // .: 小数点
        DecimalFormat df1 = new DecimalFormat("#,##0.00");
        String formatted1 = df1.format(number);
        System.out.println("货币风格: " + formatted1); // 输出: 货币风格: 1,234,567.89
        DecimalFormat df2 = new DecimalFormat("0.00E0");
        String formatted2 = df2.format(number);
        System.out.println("科学计数法风格: " + formatted2); // 输出: 科学计数法风格: 1.23E6
    }
}

总结与最佳实践

方法 优点 缺点 适用场景
String.valueOf() 简单、高效、标准 无法自定义格式 绝大多数场景下的首选,只需将 double 转为标准字符串时。
Double.toString() valueOf 功能相同 可读性稍逊于 String.valueOf String.valueOf 几乎可以互换使用。
String.format() 格式化控制强大,语法简洁 对于复杂本地化支持不如 DecimalFormat 需要快速、简单地指定格式(如保留N位小数)时。
DecimalFormat 功能最强大,支持复杂模式和本地化 代码稍显冗长,需要创建对象 需要高度自定义的数字格式,或处理国际化(如货币)时。

核心建议:

  1. 如果只是简单地转换 doubleString,没有任何格式要求,请使用 String.valueOf(double d) 这是最高效、最标准、最不容易出错的方式。

    double d = 123.45;
    String s = String.valueOf(d); // 推荐
  2. 如果需要控制小数位数、添加千位分隔符等格式化需求,请使用 String.format()

    double d = 123.4567;
    String s = String.format("%.2f", d); //
分享:
扫描分享到社交APP
上一篇
下一篇