在 Java 里,BigDecimal 本身不是整数类型,它是任意精度的“十进制浮点数”。
如果你说的“任意精度整数”是指 BigInteger,那才是真正的任意精度整数。
下面分两种情况说清楚。
BigInteger 做“任意精度整数除法”import java.math.BigInteger;
BigInteger a = new BigInteger("1000000000000000000000000000007");
BigInteger b = new BigInteger("3");
BigInteger quotient = a.divide(b); // 整除(向下取整)
System.out.println(quotient);
BigInteger[] result = a.divideAndRemainder(b);
BigInteger q = result[0]; // 商
BigInteger r = result[1]; // 余数
✅ 这是真正的整数除法,不会丢精度。
import java.math.BigDecimal;
import java.math.RoundingMode;
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
BigDecimal result = a.divide(b, 20, RoundingMode.HALF_UP);
System.out.println(result);
BigDecimal result = a.divide(b, 0, RoundingMode.DOWN);
| 需求 | 推荐 |
|---|---|
| 整数除法、不想要小数 | ✅ BigInteger.divide |
| 金额、十进制精确计算 | ✅ BigDecimal |
| 需要无限精度分数 | ❌ Java 不支持,要用 BigInteger 自己实现分子/分母 |
new BigDecimal(0.1); // ❌ 不精确
new BigDecimal("0.1"); // ✅ 精确
BigDecimal 构造 一定要用字符串。
整数任意精度除法 → 用
BigInteger.divide
十进制精确除法 → 用BigDecimal.divide(..., scale, RoundingMode)
如果你是想做“分数运算 / 保留整数 / 高精度算法”,可以告诉我具体场景,我可以直接给你写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。