当前位置: 首页 > news >正文

Springboot Long类型数据太长返回给前端,精度丢失问题 复现、解决

前言

惯例,收到兄弟求救,关于long类型丢失精度的问题:

存在一个初学者不会,就会有第二个初学者不会,所以我出手。

正文

不多说,开搞。



如题, 后端返回的数据 给到 前端, Long类型数据太长导致精度丢失。

复现示例



比如我们写个接口:

我们特意去把 Long类型 14位 到 20位的数据都 塞到返回值里面
 

    @RequestMapping("/test")@ResponseBodypublic TestDTO test(){TestDTO testDTO=new TestDTO();testDTO.setNumStr("12345678901234568901234567890123456890");testDTO.setNum14(12345678901234L);testDTO.setNum15(123456789012345L);testDTO.setNum16(1234567890123456L);testDTO.setNum17(12345678901234567L);testDTO.setNum18(123456789012345678L);testDTO.setNum19(123456789012345689L);testDTO.setNum20(1234567890123456890L);return testDTO;}

TestDTO.java:
 

public class TestDTO {private String numStr;private Long num14;private Long num15;private Long num16;private Long num17;private Long num18;private Long num19;private Long num20;//省略set、get
}

这时候前端调用看看效果,可以看到出现了精度丢失的场景:

原因

 js数字的精度是有限的,Java的Long类型的数字超出了JavaScript的处理范围。
 内部只有一种数字类型Number,双精度64位格式存储,即使整数也是如此。
 最大的数值应该是2的53次方-1,十进制是【9007199254740991】,16位。
 所以说超过16位,那么如果属于Number类型去解析的,就会丢失精度。

解决方案:

@JsonSerialize(using=ToStringSerializer.class)



 看看效果:

 好了,该篇就到这。

http://www.lryc.cn/news/41882.html

相关文章:

  • Anaconda虚拟环境的创建方法(命令创建)
  • 数据结构——树与二叉树
  • vue后台管理系统
  • spring boot 集成 postgis jar
  • 【Java进阶篇】——反射机制
  • Oracle中含有recover 状态的数据文件环境中,做异机恢复
  • 图像识别模型
  • [零刻]EQ12 N100 迷你主机:从开箱到安装ESXi+虚拟机
  • MongoDB基础
  • 【Linux】Linux基本指令(下)
  • 基于uniapp+u-view开发小程序【技术点整理】
  • 投稿指南【NO.7】目标检测论文写作模板(初稿)
  • 【绘图】比Matplotlib更强大:ProPlot
  • 经典七大比较排序算法 ·上
  • 【网络安全工程师】从零基础到进阶,看这一篇就够了
  • 素描-基础
  • Elasticsearch:高级数据类型介绍
  • Golang每日一练(leetDay0012)
  • Web前端:6种基本的前端编程语言
  • 九【springboot】
  • 《程序员成长历程的四个阶段》
  • 【SpringBoot】Spring data JPA的多数据源实现
  • uni-app基础知识介绍
  • Word2010(详细布局解释)
  • Spring如何实现Quartz的自动配置
  • 计算机组成原理——作业四
  • 2023前端面试题(经典面试题)
  • 【Linux内网穿透】使用SFTP工具快速实现内网穿透
  • SQL语句性能分析
  • 【K3s】第28篇 详解 k3s-killall.sh 脚本