老鬼的博客 来都来啦,那就随便看看吧~
net.lib.json的double类型精度损失问题
发布于: 2019-10-25 更新于: 2019-10-25 分类于:  阅读次数: 

1.背景

1
保险公司年金产品的费率,要编写跑费率的代码,并写到excel里面,此时就出现了jsonobject的精度损失问题。

2.测试代码如下

  • 代码
1
2
3
4
5
6
7
8
public static void main(String[] args) throws IOException {
String s = "{\r\n" +
" \"rate\":18232343112.989023\r\n" +
"}";
JSONObject t = JSONObject.fromObject(s);
System.out.println("net.lib.json:"+Math.round(t.getDouble("rate")));

}
  • 结果
1
net.lib.json:18232342500
  • 问题
1
此时就产生了精度缺失的问题,解决方法如下。

3.解决方案

1
使用阿里的fastjson替换当前的net.lib.json,测试代码如下:
  • 代码
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) throws IOException {
String s = "{\r\n" +
" \"rate\":18232343112.989023\r\n" +
"}";
JSONObject t = JSONObject.fromObject(s);
System.out.println("net.lib.json:"+Math.round(t.getDouble("rate")));
com.alibaba.fastjson.JSONObject at = JSON.parseObject(s);
System.out.println("fastjson:"+Math.round(at.getDoubleValue("rate")));

}
  • 结果
1
2
net.lib.json:18232342500
fastjson:18232343113
*************感谢您的阅读*************