简短结论:BigDecimal 本身不是“任意精度整数”类型,但它可以表示任意精度的数值(包括整数),并且可以“取整”。如果你说的是 任意精度整数,更合适的是 BigInteger;BigDecimal 是用于任意精度的小数/定点数。
下面分点说明:
BigDecimal 提供了多种取整方式,核心依赖 RoundingMode:
BigDecimal bd = new BigDecimal("123.456");
// 舍去小数(向下取整,向零方向)
BigDecimal intValue = bd.setScale(0, RoundingMode.DOWN);
// 123
// 四舍五入
BigDecimal round = bd.setScale(0, RoundingMode.HALF_UP);
// 123
// 向上取整
BigDecimal ceil = bd.setScale(0, RoundingMode.CEILING);
// 124
// 向下取整(数学意义)
BigDecimal floor = bd.setScale(0, RoundingMode.FLOOR);
// 123
BigDecimal result = bd.setScale(0, RoundingMode.FLOOR);
直接截断小数部分(向零取整)
BigInteger i = bd.toBigInteger(); // 123
只有“本来就是整数”才能转,否则抛异常
new BigDecimal("10").toBigIntegerExact(); // OK
new BigDecimal("10.1").toBigIntegerExact(); // ArithmeticException
double 那样丢精度new BigDecimal("123456789012345678901234567890.123456789")
✅ 直接用 BigInteger
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = a.add(BigInteger.ONE);
BigInteger:
BigDecimal 可以任意精度取整(用 setScale / toBigInteger),但它不是整数类型;如果你只处理整数,用 BigInteger 更合适。
如果你有具体场景(金额?除法?ceil/floor?),我可以给你最合适写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。