目录

后端Long类型传给前端显示丢失精度

后端Long类型传给前端显示丢失精度

目录


问题描述

后端服务controller传给前端Long类型的字段,出现丢失精度问题。

原数据18位,例如:157276510349800005

private Long customerId;

传给前端,页面显示为:157276510349800000

测试第一步

在本地测试,Long类型在本地输出正常,可知后端传参数正常

    public static void main(String[] args) {
        Long id = 157276510349800005L;
        System.out.println(id);
    }
    //输出结果157276510349800005

测试第二步

前端接受出现精度丢失

https://i-blog.csdnimg.cn/blog_migrate/092ead9bb488e55d6f8a726230259d2f.png

原因

js获得后端返回long类型时,会存在数据丢失的问题

JS内置有32位整数,而 number类型的安全整数是53位 。如果超过53位,则精度会丢失。正如现在后台传来一个64位的Long型整数,因此超过了53位,所以后台返回的值和前台获取的值会不一样。

解决

后端传给前端时修改类型为String,toString()