在 Java 里要先澄清一个概念:
BigDecimal 是任意精度的小数(十进制)BigIntegerBigDecimal 内部可以“表示整数”,但不是专门的整数类型下面分情况说明。
✅ 用 BigInteger
import java.math.BigInteger;
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = BigInteger.ZERO;
BigInteger c = BigInteger.valueOf(100); // 小整数推荐这种方式
特点:
add, multiply, mod 等BigDecimal 表示“整数值”import java.math.BigDecimal;
BigDecimal a = new BigDecimal("123456789012345678901234567890");
✅ 不会丢精度
✅ 适合任意长度整数
BigInteger 转 BigDecimalBigInteger bi = new BigInteger("12345678901234567890");
BigDecimal bd = new BigDecimal(bi);
✅ 明确“这是整数”
valueOf(仅适合较小 long)BigDecimal bd = BigDecimal.valueOf(123456L);
⚠️ 不能用于超过 long 范围的整数
BigDecimal bd = new BigDecimal(0.1); // 有精度问题
❌ 因为 0.1 在 double 中本身不精确
可以指定标度(scale):
BigDecimal bd = new BigDecimal("123").setScale(0);
或者:
bd = bd.setScale(0, RoundingMode.UNNECESSARY);
| 需求 | 推荐 |
|---|---|
| 任意精度整数 | BigInteger |
| 十进制任意精度(含整数) | BigDecimal(String) |
| 金额 / 财务 | BigDecimal |
| 大整数运算 | BigInteger |
如果你愿意,可以告诉我:
我可以帮你选最合适的类型和写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。