简短结论:java.math.BigDecimal 可以做除法,但它不是“任意精度整数”,而是任意精度的十进制浮点数;是否能“整除/得到有限结果”取决于除数。
下面分点说明:
BigInteger:任意精度整数BigDecimal:任意精度的十进制数(有小数)所以严格说:
❌ BigDecimal 不是“任意精度整数”
✅ BigDecimal 是“任意精度十进制数”
示例:
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
BigDecimal c = a.divide(b); // 会抛异常
⚠️ 上面代码会抛:
ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
原因:10 ÷ 3 是无限小数
BigDecimal c = a.divide(b, 2, RoundingMode.HALF_UP);
// 结果:3.33
BigDecimal a = new BigDecimal("12");
BigDecimal b = new BigDecimal("4");
BigDecimal c = a.divide(b); // 3
请用 BigInteger:
BigInteger a = new BigInteger("10");
BigInteger b = new BigInteger("3");
BigInteger q = a.divide(b); // 3(向下取整)
BigInteger r = a.remainder(b); // 1
| 需求 | 推荐类型 |
|---|---|
| 任意精度整数 | BigInteger |
| 任意精度小数 | BigDecimal |
| 整数除法 | BigInteger.divide |
| 小数除法 | BigDecimal.divide(..., scale, rounding) |
如果你能说清楚**“是不是要整除”或“结果是否允许小数”**,我可以给你最合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。