Java将具有原始浮点字段的对象序列化为Json

时间:2018-06-14 09:54:36

标签: 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 class BalanceDetail {
    private float a;
    private float b;
    private float c;
}

API调用返回:

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

我非常感谢逐步解释这些值如何在没有任何警告的情况下变成与客户完全不同的值。

1 个答案:

答案 0 :(得分:1)

这不是杰克逊的问题。

如果你运行:

public class Main {
    public static void main(String[] args) {
         System.out.println(81684436f);
    }
}

您将获得8.1684432E7

因此,这种行为背后的原因是浮点的工作原理。 您可以在https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3

上阅读更多内容