开发者社区> 问答> 正文

BigDecimal和Decimal128转换问题

JSON字符串如下:

{ "salaryStart": { "$numberDecimal": "6000" }, "salaryEnd": { "$numberDecimal": "9000" } }

由于MongoDB不支持BigDecimal类型, 需转换成Decimal128存储。

spring 定义转换器

@ReadingConverter @WritingConverter public class BigDecimalToDecimal128Converter implements Converter<Decimal128, BigDecimal> { @Override public BigDecimal convert(Decimal128 decimal128) { return decimal128.bigDecimalValue(); } }

对象字段

public class PositionDO{ //综合薪资范围起 private BigDecimal salaryStart; //综合薪资范围止 private BigDecimal salaryEnd; }

所以支持mongodb类型和java类型互转。

现在用原对象接收,抛异常 Exception in thread "Thread-8" com.alibaba.fastjson2.JSONException: TODO : 6

_问:如何用BigDecimal 接收这样的类型字段,怎样将converter使用进去?

原提问者GitHub用户lmh2017

展开
收起
飘飘斯嘉丽 2023-04-21 12:03:27 343 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    BigDecimal 和 Decimal128 都是用于表示高精度小数的数据类型,但它们属于不同的数据类型,因此在进行转换时需要注意一些细节。

    在 Java 中,可以通过 BigDecimal 的 toPlainString() 方法将 BigDecimal 转换为字符串,然后再通过 new Decimal128(str) 将字符串转换为 Decimal128。示例代码如下:

    BigDecimal bigDecimal = new BigDecimal("1234.5678"); String str = bigDecimal.toPlainString(); Decimal128 decimal128 = new Decimal128(str); 在 MongoDB 的官方驱动中,可以通过 Decimal128 的 bigDecimalValue() 方法将 Decimal128 转换为 BigDecimal。示例代码如下:

    Decimal128 decimal128 = new Decimal128("1234.5678"); BigDecimal bigDecimal = decimal128.bigDecimalValue(); 需要注意的是,BigDecimal 和 Decimal128 的精度范围和舍入规则可能存在差异,因此在进行转换时需要注意数据精度是否会发生变化。

    2023-04-21 21:13:37
    赞同 展开评论 打赏
  • 问题已经修复,请用新版本 https://github.com/alibaba/fastjson2/releases/tag/2.0.7

    原回答者GitHub用户wenshao

    2023-04-21 14:50:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载