fastjson处理BigDecimal类型的数据丢失精度问题
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
楼上正解,先转化为bigdecimal就不会丢失精度了,他也有加减乘除方法
嗯 谢谢 这个可以解决单个数据的问题 有什么好的方式整个项目的这种情况一起处理的么?
改动有点大是吗?
回复
@高端大气上档次_ : 就目前的信息是有困难的。因为在double的存储和BigDecimial的变换时,是有损失的。这种情况如果有其他能统一的信息比如格式等,就可以考虑使用@JSONField注解了。
不使用double,使用字符串:b = new BigDecimal("6.01");。※6.01的时候效果更好。