fastjson处理BigDecimal类型的数据丢失精度问题

发布于 2021-12-04 19:05:31 字数 1161 浏览 916 评论 5

fastjson处理BigDecimal类型比如5.00 转json后变成了5,我想程序里保持我的原值该如何处理呢?

下面是一段测试代码:

 public static void main(String[] args) {
        List<TestVo> lists = Lists.newArrayList();

        TestVo v1 = new TestVo();
        v1.setId("1");
        v1.setAmt1(2.00);
        BigDecimal b = new BigDecimal(5.00);
        v1.setAmt2(b);

        TestVo v2 = new TestVo();
        v2.setId("1");
        v2.setAmt1(2.00);
        BigDecimal b1 = new BigDecimal(5.00);
        v2.setAmt2(b);

        lists.add(v1);
        lists.add(v2);

        Map map = Maps.newHashMap();
        map.put("data", lists);
        System.out.println(JSON.toJSONString(map));
        System.out.println(JSON.toJSON(map));
        System.out.println(JSON.toJSONString(map, SerializerFeature.WriteBigDecimalAsPlain));
}

打印结果如下:

{"data":[{"amt1":2.0,"amt2":5,"id":"1"},{"amt1":2.0,"amt2":5,"id":"1"}]}
{"data":[{"amt1":2.0,"amt2":5,"id":"1"},{"amt1":2.0,"amt2":5,"id":"1"}]}
{"data":[{"amt1":2.0,"amt2":5,"id":"1"},{"amt1":2.0,"amt2":5,"id":"1"}]}

我想生成的json串保持原数值,需要怎么处理呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

长安忆 2021-12-05 05:49:00

楼上正解,先转化为bigdecimal就不会丢失精度了,他也有加减乘除方法

多情癖 2021-12-05 05:17:14

嗯 谢谢 这个可以解决单个数据的问题 有什么好的方式整个项目的这种情况一起处理的么?

情痴 2021-12-05 02:34:41

改动有点大是吗?

不再见 2021-12-04 21:12:43

回复
@高端大气上档次_ : 就目前的信息是有困难的。因为在double的存储和BigDecimial的变换时,是有损失的。这种情况如果有其他能统一的信息比如格式等,就可以考虑使用@JSONField注解了。

断爱 2021-12-04 20:51:01

不使用double,使用字符串:b = new BigDecimal("6.01");。※6.01的时候效果更好。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文