在 Java 中,double 本身是二进制浮点数,不能直接“精确取几位小数”,只能按需求进行格式化或四舍五入。下面按常见场景给你总结几种正确做法。
DecimalFormat(推荐)import java.text.DecimalFormat;
double d = 3.1415926;
DecimalFormat df = new DecimalFormat("#.00"); // 保留2位
String result = df.format(d);
System.out.println(result); // 3.14
| 格式 | 含义 |
|---|---|
#.## |
最多2位,不补0 |
#.00 |
固定2位,不足补0 |
0.000 |
固定3位 |
String.formatdouble d = 3.1;
String s = String.format("%.2f", d);
System.out.println(s); // 3.10
✅ 适合简单场景
❌ 返回的是字符串,不是数值
BigDecimal(最精确,推荐金融计算)import java.math.BigDecimal;
import java.math.RoundingMode;
double d = 3.145;
BigDecimal bd = new BigDecimal(d)
.setScale(2, RoundingMode.HALF_UP);
double result = bd.doubleValue();
System.out.println(result); // 3.15
✅ 四舍五入
✅ 精度可控
✅ 金融/金额计算必用
⚠️ 注意:
不要直接 new BigDecimal(0.1),推荐用字符串:
BigDecimal bd = new BigDecimal("0.1");
Math.round(不推荐复杂场景)double d = 3.145;
double result = Math.round(d * 100.0) / 100.0;
System.out.println(result); // 3.15
⚠️ 问题:
| 方式 | 用途 | 是否精确 | 推荐 |
|---|---|---|---|
DecimalFormat |
显示 | ❌ | ✅ |
String.format |
显示 | ❌ | ✅ |
BigDecimal |
计算 | ✅ | ⭐⭐⭐ |
Math.round |
简单处理 | ⚠️ | ❌ |
String.format / DecimalFormatBigDecimal如果你有具体场景(比如保留两位小数并比较、计算、存数据库),我可以直接帮你写最合适的代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。