一、现象与分析

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类型精度丢失问题?的更多相关文章

  1. Java-从Double类型精度丢失认识BigDecimal

    Java-从Double类型精度丢失认识BigDecimal 参考资料 https://www.jianshu.com/p/07e3eeb90f18 https://zh.wikipedia.org/ ...

  2. Java-Long类型精度丢失问题

    问题 今天碰到一个问题,后端需要返回给前端Long类型的id,前端收到的id会发生精度丢失. 测试代码:后端返回的值为344739147160346624 但是前端获取的值为: 解决办法 将返回的值转 ...

  3. Java:利用BigDecimal类巧妙处理Double类型精度丢失

    目录 本篇要点 经典问题:浮点数精度丢失 十进制整数如何转化为二进制整数? 十进制小数如何转化为二进制数? 如何用BigDecimal解决double精度问题? new BigDecimal(doub ...

  4. C# double类型精度丢失问题

    我们先看一段代码,可以在控制台程序中执行看看结果 { double d = 500; double d1 = 233.84; double d2 = d - d1; //d2=266.15999999 ...

  5. Spring Mvc Long类型精度丢失

    背景 在使用Spring Boot Mvc的项目中,使用Long类型作为id的类型,但是当前端使用Number类型接收Long类型数据时,由于前端精度问题,会导致Long类型数据转换为Number类型 ...

  6. JS处理Long类型精度丢失问题

    解决方式一 json注解 public class ProductVo {​   @JsonSerialize(using=ToStringSerializer.class)   private Lo ...

  7. float类型进行计算精度丢失的问题

    今天一个案子,用户反映数量差异明明是 2.0-1.8,显示的结果却为0.20000005,就自己写了段方法测试了一下:package test1;public class Test2 {/*** @p ...

  8. 后端传Long类型至前端js会出现精度丢失问题

    今天开发遇到个问题,Java后端的Long类型数据,传到前端会出现精度丢失,如:164379764419858435,前端会变成164379764419858430.在浏览器中做测试可知,这就是一个精 ...

  9. 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案

    后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况.例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440. 解决方法: ...

  10. Spark SQL读取Oracle的number类型的数据时精度丢失问题

    Spark SQL读取数据Oracle的数据时,发现number类型的字段在读取的时候精度丢失了,使用的spark版本是Spark2.1.0的版本,竟然最后经过排查和网上查资料发现是一个bug.在Sp ...

随机推荐

  1. [转帖]一、Kafka Tool使用

    一.Kafka Tool使用 1.添加cluster 2.开启SASL_PLAINTEXT 如果kafka 开启SASL_PLAINTEXT认证(用户名和密码认证) 3.高级设置 如果设置的是SASL ...

  2. [转帖]高性能异步io机制:io_uring

    文章目录 1.性能测试 1.1.FIO 1.2.rust_echo_benc 2.io_uring 2.1.io_uring_setup 2.2.io_uring_enter 2.3.io_uring ...

  3. 基于Prometheus和Grafana监控redis,Oracle,mysql,pg以及sqlserver的方法总结

    基于Prometheus和Grafana监控redis,Oracle,mysql,pg以及sqlserver的方法总结 简单记录一下方法 1.获取相应的exporter 1. redis docker ...

  4. 2021美亚杯团队赛write up

    个人赛与团队赛下载文件解压密码:MeiyaCup2021 加密容器解密密码: uR%{)Y'Qz-n3oGU`ZJo@(1ntxp8U1+bW;JlZH^I4%0rxf;[N+eQ)Lolrw& ...

  5. net core部署iis执行此操作时出错web.config

    页面访问会报服务器内部错误,你点对应的IIS下的默认页面或模块会出现下面的错语. 请到官网下载对应的运行时:https://www.microsoft.com/net/download 如果是服务器, ...

  6. 爱了爱了!推荐一个Github 70k+点赞的Java学习指南!

    大家好,我是 Guide 哥!今天给大家推荐一个非常不错的 Java 教程类开源项目-JavaGuide ,Github 地址: https://github.com/Snailclimb/JavaG ...

  7. 深入理解TF-IDF、BM25算法与BM25变种:揭秘信息检索的核心原理与应用

    深入理解TF-IDF.BM25算法与BM25变种:揭秘信息检索的核心原理与应用 1.文本特征表示方法: TF-IDF 在信息检索, 文本挖掘和自然语言处理领域, IF-IDF 这个名字, 从它在 20 ...

  8. 【6】python生成数据曲线平滑处理——(Savitzky-Golay 滤波器、convolve滑动平均滤波)方法介绍,推荐玩强化学习的小伙伴收藏

    相关文章: Python xlwt数据保存到 Excel中以及xlrd读取excel文件画图  先上效果图: 由于高频某些点的波动导致高频曲线非常难看,为了降低噪声干扰,需要对曲线做平滑处理,让曲线过 ...

  9. 6.4 Windows驱动开发:内核枚举DpcTimer定时器

    在操作系统内核中,DPC(Deferred Procedure Call)是一种延迟执行的过程调用机制,用于在中断服务例程(ISR)的上下文之外执行一些工作.DPC定时器是基于DPC机制的一种定时执行 ...

  10. 【图论】【Matlab】最小生成树之Kruskal算法【贪心思想超详细详解Kruskal算法并应用】

    最小生成树之Kruskal算法 注意:内容学习来自:b站CleverFrank数模算法精讲 导航 前言 实际问题引入 Kruskal算法 整体代码展示 尾声 前言 博主今天给大家带来的是最小生成树中两 ...