fastjson 反序列化时,如果遇到科学计数法,且最后一位是0,那么不会转换成常规数值

uyto3xhc  于 2021-11-27  发布在  Java
关注(0)|答案(1)|浏览(815)

public static void main(String[] args) {
String s = "{"aa":[{"phone":2.512677562E10,"email":"","name":"佳雨"},{"phone":3.8741444021E10,"email":"","name":"三"}]}";
System.out.println(new BigDecimal("2.512677562E10").toPlainString());
System.out.println(new BigDecimal("3.8741444021E10").toPlainString());
JSONObject jsonObject = JSON.parseObject(s);
System.out.println(jsonObject);
}

输出结果
25126775620
38741444021
{"aa":[{"phone":2.512677562E+10,"name":"佳雨","email":""},{"phone":38741444021,"name":"三","email":""}]}
最后一位是0的科学计数法数值,不会进行转换

bn31dyow

bn31dyow1#

你好,你出现的这个问题与这个项目无关的,
问题出在BigDecimal这个类中
你可以尝试一下这个代码:

String a = "2.512677562E10";
    char[] aa = a.toCharArray();
    BigDecimal x = new BigDecimal(aa);

    String b = "3.8741444021E10";
    char[] bb = b.toCharArray();
    BigDecimal y = new BigDecimal(bb);
    System.out.println(x);
    System.out.println(y);

输出结果为:
2.512677562E+10
38741444021

  • BigDecimal 中有一个scale()函数

  • 这个值是小数点后的位数-指数,

  • 所以这两个数值的scale分别为 -1 和 0

  • 而且当scale的值为负数的时候,就会以科学技术法的形式表示

  • 所以根本问题不在于结尾是0,也不在于项目程序,而是在BigDecimal这个类中

你可以自己尝试一下

相关问题