1. 概述

本文将介绍几种在 Java 中将 String 转换为 double 的常见方法。

2. 使用 Double.parseDouble

最常用的方法之一是使用 Double.parseDouble

assertEquals(1.23, Double.parseDouble("1.23"), 0.000001);

优点:直接返回原始类型 double,无需自动拆箱
推荐指数:⭐⭐⭐⭐⭐
注意:输入为 null 时会抛出 NullPointerException,非法格式会抛出 NumberFormatException

3. 使用 Double.valueOf

我们也可以使用 Double.valueOf 方法:

assertEquals(1.23, Double.valueOf("1.23"), 0.000001);

⚠️ 该方法返回的是 Double 对象,需要自动拆箱成原始类型 double
从 Java 5 开始,编译器会在需要时自动完成拆箱操作。

适用场景:需要返回 Double 对象时
一般情况建议使用 parseDouble 更简洁高效

4. 使用 DecimalFormat.parse

当字符串格式较复杂(如包含货币符号、千分位分隔符等)时,可以使用 DecimalFormat

DecimalFormat format = new DecimalFormat("\u00A4#,##0.00");
format.setParseBigDecimal(true);

BigDecimal decimal = (BigDecimal) format.parse("-$1,000.57");

assertEquals(-1000.57, decimal.doubleValue(), 0.000001);

⚠️ parse 方法返回的是 Number 类型,需调用 doubleValue() 获取 double 值。
✅ 设置 setParseBigDecimal(true) 可返回 BigDecimal,提升精度控制能力

📌 适用场景:格式化字符串的解析,如货币、百分比等
📌 注意:性能略低于前两种方式,非必要不推荐

更多关于 DecimalFormat 的使用,请参考《Java DecimalFormat 实用指南

5. 异常处理

以下是常见异常行为:

方法 输入 null 非法字符串
Double.parseDouble 抛出 NullPointerException 抛出 NumberFormatException
Double.valueOf 抛出 NullPointerException 抛出 NumberFormatException
DecimalFormat.parse 抛出 NullPointerException 抛出 ParseException

📌 踩坑提醒

  • 不要忽略异常处理,特别是在处理用户输入或外部数据时
  • 使用 try-catch 包裹转换逻辑,避免程序崩溃

6. 避免使用已弃用的方法

在 Java 9 之前,可以使用构造函数创建 Double 对象:

new Double("1.23"); // Java 9 之前可用

已弃用:Java 9 开始该构造方法已被标记为废弃,不建议使用
替代方案:使用 Double.parseDoubleDouble.valueOf

7. 总结与建议

方法 返回类型 是否推荐 适用场景
Double.parseDouble double 简单直接,推荐首选
Double.valueOf Double ✅✅ 需要对象类型时
DecimalFormat.parse Number ⚠️ 复杂格式解析
new Double() Double Java 9+ 已弃用

📌 总结

  • 优先使用 Double.parseDouble,简单粗暴高效
  • 有特殊格式需求时考虑 DecimalFormat
  • 避免使用已弃用的构造函数

完整示例代码可参考:GitHub 项目地址


原始标题:Convert String to Double in Java

» 下一篇: Java 安全基础