温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java BigDecimal任意精度整数怎么取模

发布时间:2026-09-12 06:12:53 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 本身没有“任意精度整数取模”的语义,因为 BigDecimal 是有标度(scale)的,模运算通常是对整数定义的。

如果你说的是 “任意精度整数”,正确的类其实是 BigInteger,而不是 BigDecimal。


一、任意精度整数取模(推荐)

✅ 使用 BigInteger.mod

import 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)

方法 1:转成 BigInteger

BigDecimal a = new BigDecimal("123456789012345678901234567890");
BigDecimal m = new BigDecimal("97");

BigInteger r = a.toBigInteger().mod(m.toBigInteger());

⚠️ 如果 BigDecimal 有小数,会直接截断


方法 2:用 divideAndRemainder(保留小数语义)

BigDecimal[] result = a.divideAndRemainder(m);
BigDecimal quotient = result[0];
BigDecimal remainder = result[1];

⚠️ 要求:

  • m 不能为 0
  • 结果余数符号同 a

三、总结建议

✅ 任意精度整数取模 → 用 BigInteger.mod
❌ 不要试图用 BigDecimal 当整数用

如果你有:

  • 超大整数
  • 模幂运算(modPow)
  • 素数相关

我也可以直接给你示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手