js处理long精度丢失

1、业务背景

调用接口返回数据实体,id是long类型,浏览器(谷歌)进行访问返回的id最后两位变成0了,精度丢失。但是通过postman是正常的。

2、问题分析

这是因为在 JavaScript 中,数字类型默认会被转换为双精度浮点数,而双精度浮点数的精度有限,只能精确表示 2 的 53 次方以内(即 Number.MAX_SAFE_INTEGER,约为 9 x 10^15)的整数。对于超过该范围的长整数,JavaScript 会发生精度丢失,导致值变得不准确(前端JavaScript最大只能接收16位数字)。

3、问题验证

打开浏览器,按F12调出控制台,在控制台中输入 console.log(9223372036854775807) ,打印的结果与传入的参数不一致

4、解决方案

方法一,在属性上添加注解:@JsonSerialize(using = ToStringSerializer.class),将数值转换为字符串

	/*** 用户ID*/@JsonSerialize(using = ToStringSerializer.class)@Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")private Long userId;

方法二,在application.properties配置文件中添加配置:

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
# 将 long 类型序列化为字符串类型
spring.jackson.generator.write-numbers-as-strings=true

注意:此方式,会影响所有的接口,所有接口中的数字字段,都会被转换为字符串输出
其中,WRITE_DATES_AS_TIMESTAMPS 表示是否将日期类型序列化为时间戳类型,默认为 true,这里设置为 false 如果需要将日期类型序列化为时间戳类型,则不需要设置此属性。而 WRITE_NUMBERS_AS_STRINGS 则表示是否将数字类型序列化为字符串类型,默认为 false,这里设置为 true 即可将 long 类型序列化为字符串类型。

方法三,spring boot项目中添加jackson配置:

@Configuration
public class BigNumberHandlerConfig {@Beanpublic MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();ObjectMapper mapper = new ObjectMapper();//数字转字符串SimpleModule simpleModule = new SimpleModule();simpleModule.addSerializer(Long.class, ToStringSerializer.instance);simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);simpleModule.addSerializer(Float.class, ToStringSerializer.instance);simpleModule.addSerializer(Float.TYPE, ToStringSerializer.instance);simpleModule.addSerializer(Double.class, ToStringSerializer.instance);simpleModule.addSerializer(Double.TYPE, ToStringSerializer.instance);simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);mapper.registerModule(simpleModule);converter.setObjectMapper(mapper);return converter;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记十二】EWM上架仓位确定逻辑及操作演示

一、前言 关于EWM上架仓位确定的过程,我在【学习笔记十一】EWM上架目标仓位确定过程及配置-CSDN博客中讲到了 EWM根据仓库类型(storage type)、仓库分区(storage section)和上架策略(putaway strategies&…

机器学习算法快速入门

文章目录 0.简介1.常用术语1) 模型2) 数据集3) 样本&特征4) 向量5) 矩阵6)假设函数&损失函数7)拟合&过拟合&欠拟合 2.线性回归3.梯度下降求极值4.Logistic回归算法(分类问题)5.KNN最邻近分类算法6.朴素贝叶斯分类算法7.决策树…

SAP 技巧篇:解决下拉菜单不显示前缀编码问题

事务代码 BP创建主数据选择组时,组前面不显示英文分组,或者其他界面不显示对应英文分组” 01 — 背景需求 BP等事务代码进来不显示前面系统英文分组 02 — 实现 返回SAP GUI找到选项>可视化1>控件全部打钩 先打钩:在下拉列表内显示…

Golang | Leetcode Golang题解之第29题两数相除

题目: 题解: func divide(dividend, divisor int) int {if dividend math.MinInt32 { // 考虑被除数为最小值的情况if divisor 1 {return math.MinInt32}if divisor -1 {return math.MaxInt32}}if divisor math.MinInt32 { // 考虑除数为最小值的情…

汽车抗疲劳驾驶测试铸铁试验底座技术要求有哪些

铸铁平台试验台底座的主要技术参数要求 1、 试验台底座设计制造符合JB/T794-1999《铸铁平板》标准。 2、 试验铁底板及所有附件的计量单位全部采用 单位(SI)标准。 3、铸铁平台平板材质:用细密的灰口铸铁HT250或HT200,强度符…

U盘怎么加密?U盘加密的方法有哪些?

U盘作为一种便携式的存储设备,广泛应用于日常生活和工作中。但由于其易于携带和使用的特性,U盘中的数据也面临着被未经授权访问的风险。因此,对U盘进行加密成为了保护数据安全的重要措施。本文将介绍几种常见的U盘加密方法,帮助用…

【C++学习】C++4种类型转换详解

这里写目录标题 🚀C语言中的类型转换🚀为什么C需要四种类型转换🚀C强制类型转换🚀static_cast🚀**reinterpret_cast**🚀const_cast与volatile🚀dynamic_cast 🚀C语言中的类型转换 在…

腾讯EdgeOne产品测评体验—Web服务全能一体化服务,主打一步到位

前言 现在网络Web攻击真的防不胜防啊,相信有很多独狼开发者自己建站,租个云服务器,一部署自己的服务,每隔一段时间内测和网站总有一个要崩。自己感觉难受不说,网站稍微有点要出头的时候,数不清的访问攻击就…

【让自己的U盘变得与众不同】

文章目录 今日座右铭:在心里种花,人生才不会荒芜。 文章目录 文章目录前言一、准备ICO图标二、插入U盘1.点击新建文本文档-输入代码-点击保存2.将代码文本文档名称修改为autorun.inf在这里插入图片描述3.将图标及代码文本文档放入U盘中在这里插入图片描述…

【从浅学到熟知Linux】进程控制上篇=>进程创建、进程终止与进程等待(含_exit与exit的区别、fork函数详解、wait与waitpid详解)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程创建fork函数写时拷贝 进程退出进程退出操作系统做了什么?进程退出场景进程退出的常见方法…

面经学习(湖北航信实习)

个人评价 比较简单的面试题,项目基本不问,全是八股文,mybatis中#{}和${}之前没有遇到过,算是长知识了。 1.Java的三大特性有了解过吗? java的三大特性就是:继承,多态,封装。 继承就…

广播变量在spark中的用法以及数据倾斜问题的解决方法

1. spark中的广播变量 应用场景:广播变量用于在集群的各个节点的executor 中高效的分发一个只读的变量副本 操作原理:创建一个广播变量时,spark会将变量序列化并发送到每一个executor,每一个executor存一个副本,而不需…

mysql表的底层存储是以b+树的形式存储的吗

MySQL 中的 InnoDB 存储引擎使用 B树作为其索引结构的基础。InnoDB 是 MySQL 默认的事务型存储引擎,它支持 ACID 事务、行级锁定和外键约束等特性。 InnoDB 的表数据和索引都被存储在一个称为聚簇索引(clustered index)的 B树结构中。 在聚簇…

linux系统USB/IP远程共享USB设备 —— 筑梦之路

概述 USB/IP 是一个开源项目,已合入 Kernel,在 Linux 环境下可以通过使用 USB/IP 远程共享 USB 设备。 USB Client:使用USB的终端,将server共享的usb设备挂载到本地。 USB Server:分享本地的usb设备至远程。 架构原理…

归并排序详解(附代码)

归并排序 数据科学家每天都在处理算法。 然而,数据科学学科作为一个整体已经发展成为一个不涉及复杂算法实现的角色。 尽管如此,从业者仍然可以从建立对算法的理解和知识库中受益。 在本文中,对排序算法归并排序进行了介绍、解释、评估和实…

vue3从精通到入门4:diff算法的实现

Vue 3 的 diff 算法相较于 Vue 2 有了一些改进和优化,主要是为了应对更复杂的组件结构和更高的性能需求。 以下是 Vue 3 diff 算法在处理列表更新时的大致步骤: 头头比较:首先,比较新旧列表的头节点(即第一个节点&…

生活 - 解决提出问题的人

文章目录 解决提出问题的人好心态是正确的认知和持续的行动减少预测、增加行动和感知屏蔽力 - 去掉一切人和信息 解决提出问题的人 有段时间比较沮丧,甚至思考,到底一切有什么意义。 但一直躺着是一定不会产生价值的,报了个团出门旅行&…

C++实现通过ICMP实现ping, 计算网络抖动,时延与丢包率

文章目录 目的关于ICMPsocket 编程实现ICMP编译error代码参考博客扩展了解目的 通过C++编程实现ping, 也算是对于SOCKET编程初步了解掌握。 了解ICMP协议了解对应socket编程关于ICMP 请参考我的博客Ping工作原理 socket 编程实现ICMP Ping 使用 Internet 控制消息协议(IC…

《Stable Diffusion AI绘画宝典:从入门到精通,解锁创意新境界》

前沿 在数字化浪潮席卷全球的时代,人工智能以其惊人的创造力和创新性引领着科技新风尚。党的二十大报告明确提出了“实施科教兴国战略,强化现代化建设人才支撑”的宏伟蓝图,展现了我国在新动能、新优势方面的坚定决心和强大气魄。在这个大背…

【Linux】进程的优先级环境变量

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. 进程的优先级2.1 什么是优先级2.2 为什么要有优先级2.3 优先级的查看方式2.4 对优先级调整 3. 命令行参数4. 环境变量4.1 环境变量与配置文件4.1.1 环境变量初步介绍4.1.2 配置文件 4.2 更多环境变量4.3 整…