在 Java 中,BigDecimal 本身不限制整数位数(任意精度整数),但当需要舍入(rounding)时,通常是在小数运算或**指定 scale(小数位数)**的场景下才会用到。下面分情况说明。
BigDecimal a = new BigDecimal("123456789012345678901234567890");
scale() == 0✅ 整数本身不需要舍入
只有以下情况才需要:
divide)setScale)double → BigDecimal)java.math.RoundingMode:
| 模式 | 说明 |
|---|---|
UP |
远离零方向 |
DOWN |
向零方向(截断) |
CEILING |
向正无穷 |
FLOOR |
向负无穷 |
HALF_UP |
四舍五入(最常用) |
HALF_DOWN |
五舍六入 |
HALF_EVEN |
银行家舍入 |
UNNECESSARY |
不允许舍入(有误差会抛异常) |
BigDecimal num = new BigDecimal("12345");
// 保留 2 位小数,四舍五入
BigDecimal r1 = num.setScale(2, RoundingMode.HALF_UP);
// 12345.00
BigDecimal num = new BigDecimal("12345.678");
BigDecimal r2 = num.setScale(2, RoundingMode.HALF_UP);
// 12345.68
BigDecimal r3 = num.setScale(2, RoundingMode.DOWN);
// 12345.67
❌ 错误写法(可能抛异常):
BigDecimal result = new BigDecimal("10").divide(new BigDecimal("3"));
// ArithmeticException: Non-terminating decimal expansion
✅ 正确写法:
BigDecimal result = new BigDecimal("10")
.divide(new BigDecimal("3"), 2, RoundingMode.HALF_UP);
// 3.33
如果你只是想做整数运算,不要用舍入:
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
BigDecimal quotient = a.divideToIntegralValue(b); // 3
BigDecimal remainder = a.remainder(b); // 1
RoundingMode如果你有具体业务场景(如金额、比例、税额、分页),我可以给你更合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。