Java将带有基本浮点字段的对象序列化为Json

Java将带有基本浮点字段的对象序列化为Json,java,floating-point,jackson,Java,Floating Point,Jackson,我有一个如下所示的API: @GetMapping("/floattest") @ResponseBody public ApiResult getFloatTest() { ApiResult result = new ApiResult(); ApiObject test = new ApiObject(81684436f, 74258578f, 7425858f); result.setData(test); return result; } public

我有一个如下所示的API:

@GetMapping("/floattest")
@ResponseBody
public ApiResult getFloatTest() {
    ApiResult result = new ApiResult();
    ApiObject test = new ApiObject(81684436f, 74258578f, 7425858f);
    result.setData(test);
    return result;
}

public class BalanceDetail {
    private float a;
    private float b;
    private float c;
}
API调用返回:

{
    "data": {
        "a": 81684432,
        "b": 74258576,
        "c": 7425858
    }
}

我希望您能在没有任何警告的情况下,逐步向客户解释如何将这些值转换为完全不同的值。

这不是Jackson的问题

如果运行此命令:

public class Main {
    public static void main(String[] args) {
         System.out.println(81684436f);
    }
}
您将获得8.1684432E7

因此,这种行为背后的原因是浮点运算的工作原理。 你可以阅读更多关于