Skip to content

[BUG] 科学计数法的浮点数反序列化失败 #3939

@jujn

Description

@jujn

问题描述

问题详见以下测试用例:

    @Test
    public void test_1() {
        String json = "{\"a\":14900000000000002396241300002543983538316751946695148944854736328125e-7}";
        A a = JSON.parseObject(json, A.class);
        JSONObject obj = JSON.parseObject(json, JSONReader.Feature.UseBigDecimalForDoubles);

        BigDecimal expected = new BigDecimal("14900000000000002396241300002543983538316751946695148944854736328125e-7");
        assertEquals(expected, a.a); //失败
        assertEquals(obj.get("a"), a.a); //失败
    }

    @Test
    public void test_2() {
        String json = "{\"a\":12345678901234567890123456789012345678e-10}";
        A a = JSON.parseObject(json, A. class);
        JSONObject obj = JSON.parseObject(json, JSONReader.Feature.UseBigDecimalForDoubles);

        BigDecimal expected = new BigDecimal("12345678901234567890123456789012345678e-10");
        assertEquals(expected, a.a); //成功
        assertEquals(obj.get("a"), a.a); //失败
    }
    
    public static class A {
        public BigDecimal a;
    }

环境信息

请填写以下信息:

  • OS信息: [e.g.:CentOS 8.4.2105 4Core 3.10GHz 16 GB]
  • JDK信息: [e.g.:Openjdk 1.8.0_312]
  • 版本信息:[e.g.:Fastjson2 2.x.x]

期待的正确结果

对您期望发生的结果进行清晰简洁的描述。

相关日志输出

请复制并粘贴任何相关的日志输出。

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingfixed

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions