温馨提示×

温馨提示×

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

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

java BigDecimal任意精度整数如何取

发布时间:2026-10-23 10:59:29 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 本身不是“任意精度整数”,它是任意精度的十进制浮点数(带标度 scale)。
如果你想要“任意精度整数”,通常有两种做法:


一、直接用 BigInteger(推荐,真正的任意精度整数)

如果你只关心整数运算,不要用 BigDecimal,用 BigInteger。

import java.math.BigInteger;

BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = BigInteger.valueOf(100);

BigInteger sum = a.add(b);
BigInteger mul = a.multiply(b);

✅ 优点

  • 真正的任意精度整数
  • 没有小数、scale 问题
  • 性能比 BigDecimal 好

二、用 BigDecimal 表示“整数值”(不推荐但常见)

如果你必须使用 BigDecimal(例如从数据库或接口拿到的),可以这样“取整数”:

1️⃣ 取整(去小数)

BigDecimal bd = new BigDecimal("123.456");

// 向下取整
BigDecimal floor = bd.setScale(0, RoundingMode.FLOOR); // 123

// 四舍五入
BigDecimal round = bd.setScale(0, RoundingMode.HALF_UP); // 123

// 直接截断
BigDecimal truncate = bd.toBigInteger().toString(); // 123

2️⃣ 转成真正的整数(BigInteger)

BigInteger intVal = bd.toBigInteger();

⚠️ 注意

  • toBigInteger() 会直接丢弃小数
  • 如果 bd 有小数,这不是“四舍五入”

三、判断 BigDecimal 是否是整数

boolean isInteger = bd.scale() <= 0 ||
    bd.stripTrailingZeros().scale() <= 0;

四、常见误区

❌ 错误理解:

BigDecimal 是任意精度整数

✅ 正确理解:

  • BigDecimal = 任意精度 十进制数
  • BigInteger = 任意精度 整数

总结建议

需求 用什么
整数运算 ✅ BigInteger
金额 / 小数 BigDecimal
从 BigDecimal 取整数 toBigInteger() 或 setScale(0, ...)

如果你有具体场景(比如金额、ID、位运算、超大数),我可以给你更合适的写法。

向AI问一下细节

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

AI
助
手