在 Java 中,BigDecimal 本身就是任意精度的小数类型,而“任意精度整数”通常指的是 BigInteger。
你问的“BigDecimal 任意精度整数如何转换”,一般有几种常见场景,我分别说明:
BigDecimal bd = new BigDecimal("123.456");
BigInteger bi = bd.toBigInteger();
System.out.println(bi); // 123
BigDecimal bd = new BigDecimal("123.456");
BigInteger bi = bd.setScale(0, RoundingMode.HALF_UP).toBigInteger();
System.out.println(bi); // 123
BigInteger ceil = bd.setScale(0, RoundingMode.CEILING).toBigInteger();
BigInteger floor = bd.setScale(0, RoundingMode.FLOOR).toBigInteger();
BigInteger bi = new BigInteger("12345678901234567890");
BigDecimal bd = new BigDecimal(bi);
或指定精度:
BigDecimal bd = new BigDecimal(bi, 2); // 除以 10^2
✅ 是,如果 scale == 0:
BigDecimal bd = new BigDecimal("12345678901234567890");
System.out.println(bd.scale()); // 0
这种 BigDecimal 等价于任意精度整数。
BigDecimal bd = new BigDecimal("99999999999999999999999999");
BigInteger bi = new BigInteger("99999999999999999999999999");
❌ 不要这样写(精度风险):
BigDecimal bd = new BigDecimal(0.1); // 错误
✅ 正确方式:
BigDecimal bd = new BigDecimal("0.1");
| 场景 | 推荐 |
|---|---|
| 金额计算 | BigDecimal |
| 整数运算 | BigInteger |
| 高精度整数转小数 | new BigDecimal(bi) |
| 小数转整数 | setScale + toBigInteger |
如果你具体指的是:
可以告诉我你的使用场景,我可以给你更针对性的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。