在 Java 中,Double(双精度浮点数)转整数有几种常见方式,区别在于是否四舍五入、是否抛异常、是否溢出。下面按使用场景给你总结一下。
不推荐用于金额、精度要求高的场景
Double d = 3.99;
int i = (int)(double)d;
System.out.println(i); // 3
✅ 特点:
Math.round()(最常用 ✅)推荐:四舍五入
Double d = 3.6;
long l = Math.round(d); // 返回 long
int i = (int) l; // 如需 int 再强转
✅ 特点:
long⚠ 注意:
Double d = 1e20;
int i = (int) Math.round(d); // 溢出,结果错误
intValue() / longValue()(不推荐)Double d = 3.9;
int i = d.intValue(); // 实际是 (int)(double)d
❌ 本质还是强制转换 ❌ 不支持四舍五入
BigDecimal(金额、高精度 ✅✅)金融、金额计算强烈推荐
Double d = 3.785;
int i = new BigDecimal(d.toString())
.setScale(0, RoundingMode.HALF_UP)
.intValue();
✅ 特点:
常见舍入模式:
HALF_UP:四舍五入(常用)DOWN:直接截断UP:只要有小数就进一long 还是 int?| 场景 | 建议 |
|---|---|
| 普通计算 | Math.round() → long |
| 范围小 | (int) Math.round() |
| 金额 | BigDecimal |
| 不关心小数 | 强制转换 |
// 普通场景
int i = (int) Math.round(d);
// 金额 / 精确计算
BigDecimal bd = new BigDecimal(d.toString());
int i = bd.setScale(0, RoundingMode.HALF_UP).intValue();
如果你有具体场景(比如金额、分页、数组下标、时间戳),我可以帮你选最合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。