在 Java 里,BigDecimal 本身不是“任意精度整数”,它表示的是任意精度的十进制数(带小数位)。
如果你说的“任意精度整数”是指 BigInteger,或者想把 BigDecimal 转成“整数形式(去掉小数)”的任意精度表示,常见情况如下:
BigDecimal bd = new BigDecimal("123.456");
BigInteger bi = bd.toBigInteger(); // 123
BigDecimal bd = new BigDecimal("123.456");
BigInteger bi = bd.setScale(0, RoundingMode.HALF_UP).toBigInteger();
// 123
BigDecimal bd2 = new BigDecimal("123.567");
BigInteger bi2 = bd2.setScale(0, RoundingMode.HALF_UP).toBigInteger();
// 124
bd.setScale(0, RoundingMode.CEILING).toBigInteger();
bd.setScale(0, RoundingMode.FLOOR).toBigInteger();
BigInteger bi = new BigInteger("12345678901234567890");
BigDecimal bd = new BigDecimal(bi);
如果 BigDecimal 本身是 整数值(如 "123.000"):
BigDecimal bd = new BigDecimal("123.000");
BigInteger bi = bd.toBigIntegerExact(); // 123
⚠️ 如果有小数位会抛异常:
new BigDecimal("123.4").toBigIntegerExact();
// ArithmeticException
❌ BigDecimal ≠ BigInteger
✅ BigDecimal = BigInteger + 小数位(scale)
内部近似结构:
BigDecimal ≈ BigInteger × 10^-scale
直接用:
import java.math.BigInteger;
而不是 BigDecimal,除非你需要小数。
如果你有具体场景(例如:金融金额、加密、科学计算、JSON 解析),可以告诉我,我可以直接给你最合适的转换方式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。