成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

誰動了我的代碼——Long精度丟失

開發
非核心業務但數據量大并且頻繁寫入的表的主鍵,我們可能會考慮設計為Long類型。當數據量大了,或者Id采用雪花算法生成,這個時候詭異的事情便會發生。

一個詭異的現象

在進行數據結構設計時,我們通常需要考慮到相關業務的數據量等因素。比如非核心業務但數據量大并且頻繁寫入的表的主鍵,我們可能會考慮設計為Long類型。剛開始,數據量小,可能并不會發現什么問題。但是當數據量大了,或者Id采用雪花算法生成,這個時候詭異的事情便會發生。

后端數據正常返回,postman調試看數據也正常。但是當前端用后端返回的這個id查詢相應的數據時,便會發生詭異的NotFoundException,或者查詢的出來的數據和原先的數據不一致。

所以,誰偷偷動了我的代碼?

JavaScript的數值精度

如果只從后端分析問題,或者只從前端分析問題,那永遠也找不到答案。

在 JavaScript 中,數值類型默認會被轉換為雙精度浮點數,而雙精度浮點數的精度有限,只能精確表示 2 的 53 次方以內(即 Number.MAX_SAFE_INTEGER,約為 9 x 10^15)的整數。對于超過該范圍的長整數,JavaScript 會發生精度丟失,導致值變得不準確。

例如一個雪花算法生成的ID 1734042308679487490,前端獲取到的值卻變成了1734042308679487500

知道了問題的原因,問題就容易解決了——將Long類型作為String類型返回給前端即可。

一個簡單的解決辦法

(1) Spring Boot 中提供了 @JsonFormat 注解,可以對實體類中的屬性進行序列化和反序列化格式化。對于 Long 類型的屬性,可以設置其格式為字符串類型,并在前端進行相應的處理,以保持其精度不丟失。如:

public class Order {
  @JsonFormat(shape = JsonFormat.Shape.STRING)
  private Long id;
  ...
}

前端獲取到的是string類型的數據,自然也不會有精度丟失的問題了。

(2) SpringBoot也支持在通過配置文件在項目級別,將數值類型的數據轉成字符串返回給前端,通過在 application.properties 文件中添加配置即可:

# 默認為false
spring.jackson.seralization.WRITE_NUMBER_AS_STRINGS=true

(3) 如果不想使用 @JsonFormat 注解或者項目不是基于SpringBoot框架構建的,同樣的思路,直接將Long類型轉換成String返回給前端即可。

總結

在 JavaScript 中數值類型最大精度大約為9*10^15,即超過16位的數值一定會存在精度丟失問題。因此,后端返回Long類型的數值時,需要轉換成String給到前端。

責任編輯:趙寧寧 來源: FrenziedJavaLand
相關推薦

2020-01-10 09:06:10

Activity系統 通信

2012-12-12 09:56:40

EC2AWSAmazon

2016-10-19 11:00:26

2010-08-26 15:34:12

2021-01-08 09:35:41

LinuxHistory命令

2021-04-19 07:35:01

Linuxhistory命令

2021-04-26 10:24:52

Linux 開發操作系統

2015-06-05 15:47:47

2010-05-20 09:29:14

谷歌微軟云計算

2014-06-11 10:06:09

2015-10-09 11:02:02

2011-12-30 14:35:20

2011-01-25 09:24:00

2022-07-25 09:40:41

內存00M

2011-04-14 13:39:15

jar包

2016-05-04 10:14:32

2020-03-24 14:57:05

戴爾

2017-02-14 14:23:52

大數據春晚

2015-04-17 10:30:13

2017-06-03 16:26:05

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区视频在线观看 | 精品国产鲁一鲁一区二区张丽 | 久久丁香| 91麻豆精品一区二区三区 | 日韩成人在线看 | 一级毛片视频 | 日本精a在线观看 | 欧美影院| 一区二区精品电影 | 国产精品久久久久久吹潮 | 日本不卡一区二区三区在线观看 | 亚洲成人av一区二区 | 久久国产精品-久久精品 | 国产午夜高清 | 日韩一区二区福利视频 | 狠狠爱综合网 | 视频在线一区二区 | 特黄特色大片免费视频观看 | 国产美女视频黄a视频免费 国产精品福利视频 | 日韩精品一区二区三区视频播放 | 大陆一级毛片免费视频观看 | 午夜影院在线观看免费 | 中文字幕一区二区三区日韩精品 | 欧美伊人影院 | 精品免费国产视频 | 免费视频一区二区 | 国产日韩欧美一区二区 | 视频在线观看一区 | 午夜视频免费网站 | 亚洲精品日韩在线 | 欧美日韩亚洲成人 | 欧美精品在线播放 | 久久久精品一区二区 | 中文亚洲视频 | www.天天操 | 亚洲精品中文字幕 | 日本一区二区不卡视频 | 日韩国产一区二区 | 亚欧精品 | 色视频网站在线观看 | 天堂在线1|