如何处理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 ...
随机推荐
- [转帖]gooyfs 的编译 github
https://github.com/kahing/goofys/issues/527 @maobaolong @PengleiShi I had the same issue as you guys ...
- [转帖] q命令-用SQL分析文本文件
https://www.cnblogs.com/codelogs/p/16060830.html 简介# 在Linux上分析文本文件时,一般会使用到grep.sed.awk.sort.uniq等命令, ...
- 【转帖】调教LLaMA类模型没那么难,LoRA将模型微调缩减到几小时
https://www.thepaper.cn/newsDetail_forward_23250236 LoRA 微调方法,随着大模型的出现而走红. 最近几个月,ChatGPT 等一系列大语言模型(L ...
- [转帖]logback:logback和slf4j中的:appender、logger、encoder、layout
(1)appender 1.appender标签是logback配置文件中重要的组件之一.在logback配置文件中使用appender标签进行定义.可 以包含0个或多个appender标签. 2.a ...
- Java火焰图简单学习
前言 立的flags倒了太多次 自己还是太菜了.. 课题太大, 自己简单总结一下. 要是自己总结错了. 就不收费, 错就错了 !-_-! 第一步准备环境 一定要设置对java的HOME以及PATH路径 ...
- ESXi查看底层存储磁盘厂商型号的方式与方法
ESXi查看底层存储磁盘厂商型号的方式与方法 背景 公司一台过保的服务器出现了磁盘告警 Vendor不太靠谱. 过保的机器就不管了 不买他们的服务器也不说一下是啥硬盘. 想自己替换,需要先获取磁盘的型 ...
- PG数据库恢复简单记录
公司同事给了一个很小的数据 我这边进行备份和恢复操作 第一步 创建数据库 su - postgres #进入pg数据库的用户 psql #输入密码 登录 create user demo with p ...
- 8.9 RDTSC时钟检测反调试
RDTSC时钟检测同样可实现反调试检测,使用时钟检测方法是利用rdtsc汇编指令,它返回至系统重新启动以来的时钟数,并且将其作为一个64位的值存入EDX:EAX寄存器中,通过运行两次rdstc指令,然 ...
- 【C语言深度解剖】一篇解决程序的环境【编译+链接详解】让面试官给我们竖起大拇指
文章目录 程序的翻译环境 翻译环境详解 编译 预编译 编译 汇编 关于形成符号表 链接 运行环境 尾声 [C语言深度解剖][Linux操作系统]程序的环境[编译+链接详解] 那么这里博主先安利一下一些 ...
- 2022年“腾讯杯”大学生程序设计竞赛 死去的 Elo 突然开始攻击我 题解
题目链接:死去的 Elo 突然开始攻击我 容易知道,如果暴力对某个区间而言进行查询,我们可以考虑使用并查集,开一个桶,每次添加一个数 \(val\),那么如果已经存在了 \(val-1\) 或者 \( ...