如何处理Long类型精度丢失问题?
一、现象与分析:
1.1. 现象
前后端交互,当后端传一些值给前端的时候,如果是long类型,有可能会出现数字太大而前端接收不了(java中的long大于js的number)而导致数据不一致,精度会丢失。
1.2. 分析

1 <!DOCTYPE html>
2 <html >
3 <head>
4 <title>test</title>
5 <script>
6 alert(1460543153605050369);
7 </script>
8 </head>
9 <body>
10 <h2>欢迎使用!!</h2>
11 <div><a href="http://www.baidu.com" th:href="${info}">百度一下</a></div>
12 </body>
13 </html>
验证
例如:后端Long类型,前端number类型,它们的精度不一样,导致精度丢失现象
库中存的值:1460543153605050369
后端取的值:1460543153605050369
前端得到值:1460543153605050400
二、解决方案(后端处理)
将Long类型转成String,再传给前端
2.1. 方法一单个注解

@JsonSerialize(using= ToStringSerializer.class)
private Long id;
单个注解
2.2. 方法二统一配置

1 package com.jiawa.wiki.config;
2
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import com.fasterxml.jackson.databind.module.SimpleModule;
5 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
6 import org.springframework.context.annotation.Bean;
7 import org.springframework.context.annotation.Configuration;
8 import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
9
10 /**
11 * 统一注解,解决前后端交互Long类型精度丢失的问题
12 */
13 @Configuration
14 public class JacksonConfig {
15
16 @Bean
17 public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
18 ObjectMapper objectMapper = builder.createXmlMapper(false).build();
19 //全局配置序列化返回json处理
20 SimpleModule simpleModule = new SimpleModule();
21 //json Long ==>String
22 simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
23 objectMapper.registerModule(simpleModule);
24 return objectMapper;
25 }
26 }
统一配置
三、解决方案(前端处理)
前端一般都是用axios进行数据请求,我们通过引入json-bigint来解决
yarn add json-bigint
//或
npm install json-bigint
在封装的请求工具类中添加如下代码即可。

1 axios.defaults.transformResponse = [
2 function (data) {
3 const json = JSONBIG({
4 storeAsString: true
5 })
6 const res = json.parse(data)
7 return res
8 }
9 ]
在封装的请求工具类中添加

转自:
https://blog.csdn.net/weixin_40816738/article/details/116646412
https://www.cnblogs.com/DanielL916/p/16177853.html
https://amore.blog.csdn.net/article/details/118547668
如何处理Long类型精度丢失问题?的更多相关文章
- Java-从Double类型精度丢失认识BigDecimal
Java-从Double类型精度丢失认识BigDecimal 参考资料 https://www.jianshu.com/p/07e3eeb90f18 https://zh.wikipedia.org/ ...
- Java-Long类型精度丢失问题
问题 今天碰到一个问题,后端需要返回给前端Long类型的id,前端收到的id会发生精度丢失. 测试代码:后端返回的值为344739147160346624 但是前端获取的值为: 解决办法 将返回的值转 ...
- Java:利用BigDecimal类巧妙处理Double类型精度丢失
目录 本篇要点 经典问题:浮点数精度丢失 十进制整数如何转化为二进制整数? 十进制小数如何转化为二进制数? 如何用BigDecimal解决double精度问题? new BigDecimal(doub ...
- C# double类型精度丢失问题
我们先看一段代码,可以在控制台程序中执行看看结果 { double d = 500; double d1 = 233.84; double d2 = d - d1; //d2=266.15999999 ...
- Spring Mvc Long类型精度丢失
背景 在使用Spring Boot Mvc的项目中,使用Long类型作为id的类型,但是当前端使用Number类型接收Long类型数据时,由于前端精度问题,会导致Long类型数据转换为Number类型 ...
- JS处理Long类型精度丢失问题
解决方式一 json注解 public class ProductVo { @JsonSerialize(using=ToStringSerializer.class) private Lo ...
- float类型进行计算精度丢失的问题
今天一个案子,用户反映数量差异明明是 2.0-1.8,显示的结果却为0.20000005,就自己写了段方法测试了一下:package test1;public class Test2 {/*** @p ...
- 后端传Long类型至前端js会出现精度丢失问题
今天开发遇到个问题,Java后端的Long类型数据,传到前端会出现精度丢失,如:164379764419858435,前端会变成164379764419858430.在浏览器中做测试可知,这就是一个精 ...
- 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案
后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况.例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440. 解决方法: ...
- Spark SQL读取Oracle的number类型的数据时精度丢失问题
Spark SQL读取数据Oracle的数据时,发现number类型的字段在读取的时候精度丢失了,使用的spark版本是Spark2.1.0的版本,竟然最后经过排查和网上查资料发现是一个bug.在Sp ...
随机推荐
- [转帖]手摸手搭建简单的jmeter+influxdb+grafana性能监控平台
我安装的机器是阿里云的centos8机器,其他的系统暂未验证 1.安装influxdb influxdb 下载地址https://portal.influxdata.com/downloads/,也可 ...
- [转帖]shell脚本变量详解(自定义变量、环境变量、变量赋值、变量运算、变量内容替换)
https://developer.aliyun.com/article/885658 简介: shell变量 shell变量是指用一个特定的字符串去表示不固定的内容 1.变量的类型 1.1自定义变量 ...
- [转帖] 使用socat反向Shell多台机器
https://www.cnblogs.com/codelogs/p/16012319.html 场景# 很多时候,我们需要批量操作多台机器,业界一般使用Ansible来实现,但使用Ansible来操 ...
- CentOS上面阿里源的设置过程
1. 移除已经有的yum仓库 #原因: 公司内部部分境外网站不能访问,会提示异常. rm -rf /etc/yum.repos.d/* 2. 使用阿里源进行处理. #主要有两个, 一个是base的一个 ...
- 解决node与npm版本不一致,出现npm WARN npm npm does not support Node.js v15.14.0
出现node与npm版本不一致 今天我升级了node之后,出现的了如下信息 npm WARN npm You should probably upgrade to a newer version of ...
- 手写promise异步状态修改then方法返回来的结果
看看下面这一段代码返回来的是什么??? <body> <script type="text/javascript"> let p = new Promise ...
- tortoisegit 还原远程分支到某个版本
v2还原到v1 1.强制还原(git reset) 如果使用这种方式还原到v1,将丢失还原到v1到v2之间的所有提交及日志. 1.1显示日志 有save1.save2两条提交记录. 1.2 重置版本( ...
- Gorm日志设置
Logger Gorm提供了一个默认的logger实现,默认情况下日志数据级别为warn,同时输出慢SQL: Default = New(log.New(os.Stdout, "\r\n&q ...
- python代码的tab和空格缩进互转
代码规范 在我们项目中python代码使用tab缩进,并统一大家的编辑器设置. 如果同一个python文件中即有空格又有tab缩进,那么运行此文件会报错. 关于使用空格还是tab,这里就不展开讨论了, ...
- Elasticsearch向量检索的演进与变革:从基础到应用
Elasticsearch向量检索的演进与变革:从基础到应用 1.引言 向量检索已经成为现代搜索和推荐系统的核心组件. 通过将复杂的对象(例如文本.图像或声音)转换为数值向量,并在多维空间中进行相似性 ...