温馨提示×

温馨提示×

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

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

java BigDecimal任意精度整数怎么取整

发布时间:2026-10-02 18:53:15 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 本身是**任意精度( Arbitrary-precision )的十进制数,不是整数类型,但可以通过舍入模式(RoundingMode)**来“取整”。
下面按常见需求说明。


一、常用取整方式(核心方法)

BigDecimal bd = new BigDecimal("123.456");

1️⃣ 向下取整(floor)

bd.setScale(0, RoundingMode.FLOOR);
// 123.456 -> 123
// -123.456 -> -124

2️⃣ 向上取整(ceil)

bd.setScale(0, RoundingMode.CEILING);
// 123.456 -> 124
// -123.456 -> -123

3️⃣ 四舍五入

bd.setScale(0, RoundingMode.HALF_UP);
// 123.456 -> 123
// 123.567 -> 124

4️⃣ 银行家舍入(推荐用于金额)

bd.setScale(0, RoundingMode.HALF_EVEN);
// 2.5 -> 2
// 3.5 -> 4

5️⃣ 直接截断(非四舍五入)

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()

如果你有具体业务场景(比如金额、分页、统计),我可以给你更合适的写法。

向AI问一下细节

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

AI
助
手