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.parseDouble
或 Double.valueOf
7. 总结与建议
方法 | 返回类型 | 是否推荐 | 适用场景 |
---|---|---|---|
Double.parseDouble |
double |
✅ | 简单直接,推荐首选 |
Double.valueOf |
Double |
✅✅ | 需要对象类型时 |
DecimalFormat.parse |
Number |
⚠️ | 复杂格式解析 |
new Double() |
Double |
❌ | Java 9+ 已弃用 |
📌 总结:
- 优先使用
Double.parseDouble
,简单粗暴高效 - 有特殊格式需求时考虑
DecimalFormat
- 避免使用已弃用的构造函数
完整示例代码可参考:GitHub 项目地址