Gson使用Object接收長數字問題

近期發現公司同事在使用Gson對數字進行反序列列化時出現丟失精度的問題,在這里搬運一下,做個記錄~

現象

使用Gson反序列化長Long數字(大于16位),如果用Object類型來接收則會丟失精度。
Gson會將數字反序列化為double類型,double類型本身就容易丟精度。(精度丟失原因可自行搜索)
再轉回Long時就會導致數據異常
在這里插入圖片描述

根因

Gson在把數字反序列為Object時,默認會轉換成Double。
可以看Gson的ObjectTypeAdapter類
在這里插入圖片描述
碰到數字類型時,會調用toNumberStrategy。
如果你的Gson低于2.8.9,這里就不會使用toNumberStrategy。
直接是in.nextDouble();

這個toNumberStrategy是構建Gson對象時傳入的,在Gson2.8.9中默認是Double策略
在這里插入圖片描述
在這里插入圖片描述
所以,Gson在把數字反序列為Object時,默認會轉換成Double。
而超過16位的數字轉成Double,精度就會丟失導致數據不正確。

解決辦法

1.盡量避免用Object來接收大數字,最好使用字符串String接收
2.如果你非要用Object。那就修改Gson反序列化Object時候的策各吧(需要Gson版本>=2.8.9)
在這里插入圖片描述
在GsonBuilder中有一個方法setObjectToNumberStrategy(),建議改成BigDecimal策略一勞永逸。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/710873.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710873.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710873.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小程序基礎

小程序基礎 1. 認識什么是小程序 什么是微信小程序 微信小程序是一種運行在微信內部的 輕量級 應用程序。 在使用小程序時 不需要下載安裝,用戶 掃一掃 或 搜一下 即可打開應用。它也體現了 “用完即走” 的理念,用戶不用關心安裝太多應用的問題。它…

weak的實現原理

iOS 在運行時維護著一個全局的弱引用表,該表是一個 hash 表,hash表的 key 是 對象本身,value 是指向該對象的所有 weak 指針的地址數組。 /**全局的弱引用表,本質是一個hash結構,對象本身作為key, 存儲weak修飾的指…

大模型訓練經驗

1.模型訓練好后預測全是起始符號。 解決辦法:訓練數據的輸入輸出去掉起始符號。 2.模型訓練后學不到有效信息。 加大epoch,我加大到了1000。 3.模型訓練后預測沒有結束符,暫時未解,另外,發現當訓練不足時&#xff…

Metasploit安裝及使用教程(非常詳細)從零基礎入門到精通,看完這一篇就夠了。

通過本篇文章,我們將會學習以下內容: 1、在Windows上安裝Metasploit 2、在Linux和MacOS上安裝Metasploit 3、在Kali Linux中使用 Metasploit 4、升級Kali Linux 5、使用虛擬化軟件構建滲透測試實驗環境 6、配置SSH連接 7、使用SSH連接Kali 8、配…

如何學習自然語言處理之語言模型

自然語言處理(NLP)是一種人工智能技術,它使計算機能夠理解和處理人類語言。而語言模型是NLP中的一個重要概念,主要是用來估測一些詞的序列的概率,即預測p(w1, w2, w3 … wn),其中一個應用就是句子的生成。 …

JVM運行流程

? 作者:小胡_不糊涂 🌱 作者主頁:小胡_不糊涂的個人主頁 📀 收錄專欄:JavaEE 💖 持續更文,關注博主少走彎路,謝謝大家支持 💖 JVM 1. 運行流程2. 運行時數據區2.1 堆&am…

ubuntu新建ap熱點并分享

測試環境ubuntu16,只有一臺筆記本電腦,不插網線,無線網卡既連wifi,又作為熱點 1.方法1 直接手動新建ap熱點 參考https://jingyan.baidu.com/article/ea24bc39b03fc6da62b331f0.html https://jingyan.baidu.com/article/363872ecd8f35d6e4ba…

機試指南:Ch5:線性數據結構 Ch6:遞歸與分治

文章目錄 第5章 線性數據結構1.向量 vector2.隊列 queue(1)隊列的特點、應用(2)基本操作(3)例題例題1:約瑟夫問題2 (難度:中等) (4)習題習題1:排隊打飯 (難度:中等) 3.棧 stack(1)棧…

前端 JS 經典:Content-type 詳解

1. 什么是 Content-Type Content-Type 是 HTTP 協議中的一個請求頭或響應頭字段,用于指示發送或接收的實體的媒體類型,告訴服務器或客戶端如何解析和處理請求或響應的主體部分。 2. Content-Type 的構成 Content-Type 由兩部分組成:媒體類型…

視頻在線壓縮

video2edit 一款免費的在線視頻編輯軟件,可以進行視頻合并、視頻剪輯、視頻壓縮以及轉換視頻格式等。 鏈接地址:在線視頻編輯器和轉換器 - 編輯,轉換和壓縮視頻文件 打開視頻壓縮頁面,上傳想要壓縮視頻,支持MP4&…

收入穩步增長 助力持續發展 尼康發布截至2024年3月財年第三季度財報

近日,尼康截至2024年3月財年的第三季度(2023年10月1日-2023年12月31日)財報正式發布。數據顯示,尼康集團第三財季銷售收入共計1977億日元,較去年同期上漲300億日元,漲幅約17.9%。其中影像業務領域&#xff…

Java面試題:解釋Java內存模型中的內存順序規則,Java中的線程組(ThreadGroup)的工作原理,Java中的FutureTask的工作原理

引言 在Java開發領域,內存模型、多線程和并發是三個至關重要的概念,它們直接影響到程序的性能、穩定性和可擴展性。作為面試官,考察候選人對這些概念的理解和應用能力是評估其技術水平的重要手段。本文將提供三道涉及這些核心知識點的面試題…

視頻記錄儀_基于聯發科MT6762的智能4G記錄儀方案

智能記錄儀采用聯發科強勁八核處理器,12nm制程工藝的記錄儀具便是滿足這些需求的理想選擇。搭載4GB32GB內存,并運行Android 11.0操作系統,這款記錄儀具展現出強勁的性能表現。 首先,這款記錄儀具具備優秀的視頻錄制功能。它能完整…

WPS如何共享文件和文件夾

1 WPS共享單個文件 用WPS打開要分享的文件,點擊右上角的“分享”鍵,選擇上傳到云端。 之后點擊“創建并分享”,即可分享該文檔。 2 WPS創建共享文件夾 2.1 如何共享文件夾 首先打開WPS,點擊左上角的首頁。在首頁欄中&#…

Ubuntu系統下DPDK環境搭建

目錄 一.虛擬機配置1.添加一個網卡(橋接模式)2.修改網卡類型3.修改網卡名稱4.重啟虛擬機5.查看網卡信息6.dpdk配置內存巨型頁 三 DPDK源代碼下載和編譯1.下載源代碼2.解壓源代碼3.安裝編譯環境4.編譯5.設置dpdk的環境變量6.禁止多隊列網卡7.加載igb_uio模塊8.網卡綁定9.驗證測試…

Vue3自定義文章列表組件

一、Vue3的代碼展示 <template><div><div v-for"article in articles" :key"article.id" class"article-card"><div class"author-info"><img :src"article.avatar" alt"Author Avatar&qu…

Android 驗證啟動模式

文章目錄 Android 驗證啟動模式查看任務棧launchModestandardsingleTopsingleTasksingleInstance Intent標記FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP Android 驗證啟動模式 查看任務棧 可…

軟考52-上午題-【數據庫】-關系模式2

一、關系模式的回顧 見&#xff1a;軟考38-上午題-【數據庫】-關系模式 二、關系模式 2-1、關系模式的定義 示例&#xff1a; 念法&#xff1a;A——>B A決定B&#xff0c;或者&#xff0c;B依賴于A。 2-2、函數依賴 1、非平凡的函數依賴 如果X——>Y&#xff0c;&a…

Linux Shell腳本練習(三)

1、測試用戶名與密碼是否正確。 2、輸出1-1000內的素數。 3、對 100 以內的所有正整數相加求和(1234...100)。 4、輸出9*9 乘法表。 5、編寫腳本,顯示進度條。 、 6、輸入三個數并進行升序排序

RocketMQ - 深入研究一下生產者到底如何發送消息的

1. 創建Topic的時候為何要指定MessageQueue數量 首先如果要搞明白生產者的工作原理,那么就必須先明白一個概念,MessageQueue是什么? 而要明白MessageQueue是什么,就必須把他跟Topic以及Broker綜合起來看,才能搞明白。如果我們要使用RocketMQ,你先部署出來一套RocketMQ集…