温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java Double 双精度如何取小数点后位

发布时间:2026-07-25 02:37:49 来源:亿速云 阅读:139 作者:小樊 栏目:编程语言

在 Java 中,double 本身是二进制浮点数,不能直接“精确取几位小数”,只能按需求进行格式化或四舍五入。下面按常见场景给你总结几种正确做法。


✅ 一、仅用于显示(最常用):格式化输出

1️⃣ 使用 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位

2️⃣ 使用 String.format

double d = 3.1;

String s = String.format("%.2f", d);
System.out.println(s); // 3.10

✅ 适合简单场景
❌ 返回的是字符串,不是数值


✅ 二、真正“保留小数位”(数值层面)

3️⃣ 使用 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");

4️⃣ 使用 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 / DecimalFormat
  • 金额/计算BigDecimal
  • 不要用 double 做精确小数判断

如果你有具体场景(比如保留两位小数并比较、计算、存数据库),我可以直接帮你写最合适的代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI