温馨提示×

温馨提示×

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

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

java BigDecimal任意精度整数如何序列化

发布时间:2026-09-12 06:08:55 来源:亿速云 阅读:103 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 本质不是“任意精度整数”,而是任意精度的 十进制浮点数( unscaled value + scale )。如果你说的是**“任意精度整数”**,通常更合适的是:

  • java.math.BigInteger —— 任意精度整数
  • java.math.BigDecimal —— 任意精度十进制数(可表示整数,也可表示小数)

下面分别说明序列化方式,并重点讲 BigDecimal。


一、BigDecimal 的序列化方式

✅ 1. Java 原生序列化(最简单)

BigDecimal 实现了 Serializable,可以直接序列化:

ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("big.decimal"));
oos.writeObject(bigDecimal);
oos.close();

反序列化:

ObjectInputStream ois = new ObjectInputStream(
        new FileInputStream("big.decimal"));
BigDecimal bd = (BigDecimal) ois.readObject();

✅ 优点:简单
❌ 缺点:Java 私有格式,跨语言不行


✅ 2. 转为 String 序列化(最通用)✅ 推荐

BigDecimal 的 toString() 是精确的

String s = bd.toString();

反序列化:

BigDecimal bd = new BigDecimal(s);

✅ 优点:

  • 人类可读
  • 跨语言(JSON / XML / 数据库都支持)
  • 不会丢精度

✅ 常用于:

  • JSON
  • 配置文件
  • 网络传输

✅ 3. JSON 序列化(最常见)

Jackson 示例

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(bd);

默认 Jackson 会序列化为:

"123456789012345678901234567890.123456789"

反序列化:

BigDecimal bd = mapper.readValue(json, BigDecimal.class);

✅ 不会丢精度(不像 double)


✅ 4. 以“整数 + 小数位”方式序列化(自定义)

如果你关注体积或兼容性:

BigDecimal bd = new BigDecimal("123.456");

BigInteger intVal = bd.unscaledValue();
int scale = bd.scale();

序列化:

{
  "unscaled": 123456,
  "scale": 3
}

反序列化:

BigDecimal bd = new BigDecimal(intVal, scale);

✅ 适合:

  • 自定义协议
  • 二进制格式

❌ 不推荐的方式

bd.doubleValue(); // 可能丢精度

❌ double / float 不能保证精度


二、如果你说的是 BigInteger(真正任意精度整数)

序列化方式

String s = bigInteger.toString();
BigInteger bi = new BigInteger(s);

JSON:

"123456789012345678901234567890"

三、总结建议

场景 推荐方式
Java ↔ Java 原生序列化
JSON / 网络 toString()
数据库 NUMERIC / DECIMAL
跨语言 String
高性能二进制 unscaled + scale

如果你能补充:

  • 用在哪里(JSON / Redis / 数据库 / 自定义协议)
  • 是否允许字符串形式

我可以给你最优序列化方案 + 示例代码。

向AI问一下细节

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

AI
助
手