有关json-lib2.4在转java对象时超过7位数的Double类型会出现科学计数法和精度丢失的问题

原创 2018年03月23日 21:15:19

在做项目当中发现当通过json-lib来将json字符串转成对象时,超过7位数的Double类型会出现科学计数法和精度丢失的问题,
把json-lib-2.4-jdk15.jar源码下载下来,发现是数字类型的都转为number了,而不是BigDecimal,把这里改为调用createBigDecimal在打成jar包,就可以了,具体操作如下:

1. 第一步找到源码中的JSONObject类的 _fromJSONTokener( JSONTokener tokener, JsonConfig jsonConfig ) 方法



2. 第二步通过 nextValue( jsonConfig )调用,找到类JSONTokener,将NumberUtils.createNumber(s)调用改为NumberUtils.createBigDecimal(s)即可


3.用工具重新打好jar包,替换掉之前旧版的jar即可

java对象转json, 数字精确出现丢失

java中的大数字比如18/19位的整数(long),转为json,输出到页面后,就出现精度丢失,如果数字再大些就会出现科学计数法。 这两个问题都不是json工具包(比如Gson)的问题,而是由于j...
  • wangjun5159
  • wangjun5159
  • 2015-08-30 22:43:08
  • 5558

Java中数值较大的double类型转换为字符串时会用科学计数法显示的解决办法

java.text.NumberFormat nf = java.text.NumberFormat.getInstance(); // 不使用千分位,即展示为11672283.234,而不是11,...
  • sxg0728
  • sxg0728
  • 2015-12-11 10:51:23
  • 2281

java中Double类型的运算精度丢失的问题 (小数点多出99999999999999)

在使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我...
  • jdsjlzx
  • jdsjlzx
  • 2015-08-25 16:12:30
  • 15871

double类型数据做加和操作时会丢失精度问题处理

double类型的数据做加和操作 时会丢失精度,如下操作结果为:         int a = 3;         double b = 0.03;         double c = 0...
  • shukebai
  • shukebai
  • 2017-02-04 19:09:33
  • 2359

Java中double类型精度丢失问题

Java中double 类型精度丢失问题
  • u014306011
  • u014306011
  • 2016-05-10 23:11:10
  • 6131

java double类型加减运算时出现的精度丢失问题

问题由来:今天在写一个业务参数的时候,需要几个数一起算一下最后返回一个浮点数。 一开始我就直接用强制类型转化之后开始加加减减,后来发现总是会在末尾多出一些莫名的小数,这很明显就是精度丢失问题,但是因...
  • billluffy
  • billluffy
  • 2017-11-11 21:30:27
  • 200

关于double计算精度丢失解决办法

import java.math.BigDecimal; public class Arith { // 源文件Arith.java: /** * 由于Java的简单类型不能够精确的对浮点...
  • alvinan
  • alvinan
  • 2017-09-25 11:03:37
  • 275

经得起雷劈:关于double和int/long相互转换失去精度计算错误的问题

http://blog.csdn.net/vonger/article/details/6656219 在用C/C++做运算时,类型转换是很常见的,一般都直接用数据类型进行默认强制转化,但是这样其...
  • mydriverc2
  • mydriverc2
  • 2015-11-18 13:18:59
  • 1852

关于Java中用Double型运算时精度丢失的问题,真的很蛋疼!

在使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我...
  • Bleach_kids
  • Bleach_kids
  • 2015-10-14 19:45:41
  • 5445

java double的大数值时,不显示成科学计数法

Double d = new Double("1234567890.12"); System.out.println("d:="+d); java.text.NumberFormat nf = ja...
  • yanjiaye520
  • yanjiaye520
  • 2014-06-06 10:06:58
  • 5067
收藏助手
不良信息举报
您举报文章:有关json-lib2.4在转java对象时超过7位数的Double类型会出现科学计数法和精度丢失的问题
举报原因:
原因补充:

(最多只允许输入30个字)