在 Java 里,BigDecimal 本身是**任意精度( Arbitrary-precision )的十进制数,不是整数类型,但可以通过舍入模式(RoundingMode)**来“取整”。
下面按常见需求说明。
BigDecimal bd = new BigDecimal("123.456");
bd.setScale(0, RoundingMode.FLOOR);
// 123.456 -> 123
// -123.456 -> -124
bd.setScale(0, RoundingMode.CEILING);
// 123.456 -> 124
// -123.456 -> -123
bd.setScale(0, RoundingMode.HALF_UP);
// 123.456 -> 123
// 123.567 -> 124
bd.setScale(0, RoundingMode.HALF_EVEN);
// 2.5 -> 2
// 3.5 -> 4
bd.setScale(0, RoundingMode.DOWN);
// 123.999 -> 123
// -123.999 -> -123
BigInteger(任意精度整数)BigInteger i = bd.toBigInteger(); // 直接截断
BigInteger i2 = bd.setScale(0, RoundingMode.HALF_UP).toBigInteger();
long(注意溢出风险)long l = bd.longValue(); // 可能溢出
long l2 = bd.longValueExact(); // 溢出抛异常
❌ 这样会抛异常:
bd.setScale(0); // 没有指定 RoundingMode
✅ 必须指定舍入模式(除非本身就是整数)
BigDecimal 取整 =
setScale(0, RoundingMode.XXX)
想要整数 →toBigInteger()或longValue()
如果你有具体业务场景(比如金额、分页、统计),我可以给你更合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。