在 Java 里,BigDecimal 本身并不是“任意精度整数”,而是任意精度的“十进制数”。
如果你想要任意精度整数,通常应该用 BigInteger;
如果你一定要用 BigDecimal 来表示整数,也可以,但需要注意初始化方式。
下面我分情况说明。
✅ 优先使用 BigInteger
import java.math.BigInteger;
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = BigInteger.ZERO;
BigInteger c = BigInteger.ONE;
特点:
BigDecimal 初始化“整数值”BigDecimal 可以表示整数,只要不写小数部分即可。
import java.math.BigDecimal;
BigDecimal a = new BigDecimal("123456789012345678901234567890");
✅ 这是最推荐的方式
原因:避免 double 精度问题
double / int / longBigDecimal b = new BigDecimal(10); // int
BigDecimal c = new BigDecimal(10L); // long
BigDecimal d = new BigDecimal(10.0); // double(不推荐)
⚠️ 问题:
double 本身有精度误差BigDecimal 会“原样保留”这个误差例如:
System.out.println(new BigDecimal(0.1));
// 输出:0.10000000000000000555111512312578...
BigInteger 构造 BigDecimal(整数 → 小数)BigInteger bi = new BigInteger("1234567890");
BigDecimal bd = new BigDecimal(bi);
✅ 非常适合“整数转 BigDecimal”
BigDecimal ZERO = BigDecimal.ZERO;
BigDecimal ONE = BigDecimal.ONE;
BigDecimal TEN = BigDecimal.TEN;
| 需求 | 推荐类 | 示例 |
|---|---|---|
| 任意精度整数 | ✅ BigInteger |
new BigInteger("123") |
| 任意精度十进制数 | ✅ BigDecimal |
new BigDecimal("123") |
| 整数转 BigDecimal | ✅ BigDecimal(BigInteger) |
new BigDecimal(bi) |
| 避免精度问题 | ✅ 字符串构造 | new BigDecimal("0.1") |
想要“任意精度整数” → 用
BigInteger
必须用BigDecimal表示整数 → 用字符串构造
如果你有具体场景(比如金额、计数、幂运算、除法),我可以帮你选最合适的类型。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。