在 Java 里,BigDecimal 本身没有“任意精度整数取模”的语义,因为 BigDecimal 是有标度(scale)的,模运算通常是对整数定义的。
如果你说的是 “任意精度整数”,正确的类其实是 BigInteger,而不是 BigDecimal。
BigInteger.modimport java.math.BigInteger;
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger m = new BigInteger("97");
BigInteger r = a.mod(m);
System.out.println(r); // 模结果(始终 >= 0)
mod vs remainder| 方法 | 结果范围 | 负数行为 |
|---|---|---|
mod(m) |
0 ≤ r < m |
永远非负 |
remainder(m) |
符号同被除数 | 可能为负 |
BigInteger a = new BigInteger("-10");
BigInteger m = new BigInteger("3");
a.mod(m); // 2
a.remainder(m); // -1
BigDecimal 做“整数取模”前提:必须是整数(scale = 0)
BigIntegerBigDecimal a = new BigDecimal("123456789012345678901234567890");
BigDecimal m = new BigDecimal("97");
BigInteger r = a.toBigInteger().mod(m.toBigInteger());
⚠️ 如果 BigDecimal 有小数,会直接截断
divideAndRemainder(保留小数语义)BigDecimal[] result = a.divideAndRemainder(m);
BigDecimal quotient = result[0];
BigDecimal remainder = result[1];
⚠️ 要求:
m 不能为 0a✅ 任意精度整数取模 → 用 BigInteger.mod
❌ 不要试图用 BigDecimal 当整数用
如果你有:
modPow)我也可以直接给你示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。