在 Java 里,BigDecimal 本身不是“任意精度整数”,它表示任意精度的十进制浮点数(可以带小数位)。
如果你说的“任意精度整数”是 BigInteger,那是另一回事。
下面我分三种常见情况给你说明:
BigDecimal 除法必须指定精度和舍入模式,否则可能抛异常。
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
BigDecimal result = a.divide(b, 10, RoundingMode.HALF_UP);
System.out.println(result); // 3.3333333333
divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
scale:小数位数RoundingMode:舍入方式常见舍入模式:
RoundingMode.HALF_UP:四舍五入RoundingMode.DOWN:直接截断RoundingMode.UP:向上取整BigDecimal result = a.divide(b, 0, RoundingMode.DOWN);
System.out.println(result); // 3
BigInteger i1 = new BigInteger("100");
BigInteger i2 = new BigInteger("3");
BigInteger r = i1.divide(i2);
System.out.println(r); // 33
BigInteger 才是任意精度整数类型。
BigInteger a = new BigInteger("100000000000000000000000000");
BigInteger b = new BigInteger("7");
BigInteger result = a.divide(b);
System.out.println(result);
注意:
BigInteger.divide() 只做整数除法❌ 这样会抛异常:
new BigDecimal("1").divide(new BigDecimal("3"));
✅ 必须指定 scale + RoundingMode
| 类型 | 是否整数 | 除法是否要精度 |
|---|---|---|
| BigDecimal | 否 | ✅ 必须 |
| BigInteger | ✅ | ❌ 不需要 |
如果你能说清楚:
我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。