温馨提示×

温馨提示×

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

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

java BigDecimal任意精度整数怎么计算

发布时间:2026-10-02 21:03:23 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 本身不是“任意精度整数”,它是任意精度的十进制浮点数(可定点)。
如果你要的是任意精度整数计算,通常有两种选择:


一、真正“任意精度整数”——使用 BigInteger

如果你只做整数运算(加、减、乘、除、取模、幂等),应该用:

import java.math.BigInteger;

BigInteger a = new BigInteger("12345678901234567890123456789");
BigInteger b = new BigInteger("987654321987654321");

// 加
BigInteger sum = a.add(b);

// 减
BigInteger diff = a.subtract(b);

// 乘
BigInteger prod = a.multiply(b);

// 除(整除)
BigInteger quotient = a.divide(b);

// 取模
BigInteger mod = a.mod(b);

// 幂
BigInteger pow = a.pow(100);

// 最大公约数
BigInteger gcd = a.gcd(b);

✅ BigInteger 才是 Java 中的“任意精度整数”


二、用 BigDecimal 做“定点/高精度十进制计算”

如果你需要小数但精度不能丢(如金额),用 BigDecimal:

import java.math.BigDecimal;
import java.math.RoundingMode;

BigDecimal a = new BigDecimal("1.23456789123456789");
BigDecimal b = new BigDecimal("2.345");

// 加
BigDecimal sum = a.add(b);

// 减
BigDecimal diff = a.subtract(b);

// 乘
BigDecimal prod = a.multiply(b);

// 除(必须指定精度和舍入)
BigDecimal div = a.divide(b, 10, RoundingMode.HALF_UP);

⚠️ 注意:

  • 不要写 new BigDecimal(0.1)(用 double 构造会丢精度)
  • 除法一定要指定 scale + RoundingMode

三、BigDecimal 当“整数”用(不推荐但可行)

如果你想用 BigDecimal 当整数:

BigDecimal a = new BigDecimal("123456789123456789");
BigDecimal b = new BigDecimal("987654321");

BigDecimal result = a.multiply(b)
                    .setScale(0, RoundingMode.UNNECESSARY);

但这种情况 直接用 BigInteger 更好。


四、总结建议

需求 推荐类
任意精度整数 ✅ BigInteger
高精度小数 / 金额 ✅ BigDecimal
高性能整数 ❌ 不要用 BigDecimal

如果你能说具体场景(比如:大数阶乘?RSA?金额计算?),我可以直接给你最合适的写法。

向AI问一下细节

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

AI
助
手