new BigDecimal(double val)注意事項 / JWT解析BigDecimal類型數據

前言:

? ? ? ? 公司項目中有一個板塊需要解析JWT令牌獲取載荷里面封裝的數據,遇到要解析一個BigDecimal類型的數據


問題發現過程:

? ? ? ? 正常來說,我們解析一個JWT令牌的步驟如下:

 public static Claims getDataFromToken(String token){JwtParser jwtParser = Jwts.parser();// 通過簽名對Token進行解析,得到的結果是一個類似集合的封裝類Jws<Claims> claimsJws = jwtParser.setSigningKey(Constants.TOKEN_SECRET.getBytes(StandardCharsets.UTF_8)).parseClaimsJws(token);解析出來的類別 xxx= dataFromToken.get("令牌載荷鍵", 解析出來的類的字節碼文件);}

但是我按照解析Integer、String等類別的數據的做法,通過

BigDecimal price= dataFromToken.get("price", BigDecimal.class);

來解析一個BigDecimal類型的參數會報錯,查過后發現好像是這種轉換方法并不支持轉換BigDecimal類型的數據

? ? ? ? 為此,我想著先將其解析為一個Double類型的參數,再通過new BigDecimal(double val)方法來將其轉換為一個BigDecimal類型的數據

BigDecimal forntPrice = new BigDecimal(0.2);

但經過斷點發現 frontPrice 的值不是 0.2,而是?0.200000000000000011102230246251565404236316680908203125?


問題解決:

查看相關文檔:

簡單翻一下:

將 double 類型轉換成 BigDecimal 類型。

  • 這個構造函數的結果在某種程度上是不可預測的。你可能會覺得new BigDecimal(0.1)會創建一個剛好等于 0.1 的 BigDecimal,但它實際上等于 0.1000000000000000055511151231257827021181583404541015625 。這是因為 0.1 不能被精確地表示為一個雙精度數。
  • String 構造函數是完全可預測的,new BigDecimal("0.1")會創建一個完全等于 0.1 的 BigDecimal,建議優先使用 String 構造函數。
  • 如果必須使用 double 作為轉換源時,可以使用?BigDecimal.valueOf(0.1)?,它返回的結果也是精確的。

總結:

將 double 類型轉換為 BigDecimal 類型的時候,不要使用new BigDecimal(0.1)這個構造函數,應為它得到的結果是不精確的,

使用BigDecimal.valueOf(0.1)new BigDecimal("0.1")?

BigDecimal transactionAmount = BigDecimal.valueOf(dataFromToken.get("transactionAmount", Double.class));

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

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

相關文章

極狐GitLab 企業級 CI/CD 規模化落地實踐指南(一)

目錄 template 引用&#xff0c;減少代碼冗余&#xff0c;增強 CI/CD 構建擴展性 問題 1&#xff1a;代碼冗余&#xff0c;低效實踐 問題 2&#xff1a;維護性難&#xff0c;工作量大 ? local ? file ? remote ? template 收益 1&#xff1a;一處修改&#xff0c;多…

TIOBE2023年8月榜單發布,Python超越老將C/C++蟬聯冠軍

TIOBE 編程社區指數是一個衡量編程語言受歡迎程度的指標&#xff0c;評判的依據來自世界范圍內的工程師、課程、供應商及搜索引擎&#xff0c;TIOBE 官網近日公布了 2023 年 8 月的編程語言排行榜。 此次的榜單中&#xff0c;Python依舊穩居第一&#xff0c;占比達到了13.33%。…

jpg圖片太大怎么壓縮?這樣做輕松壓縮圖片

圖片太大會給存儲、分享帶來麻煩&#xff0c;但其實現在壓縮圖片大小也不是什么難事&#xff0c;下面就給大家分享幾個一直用的圖片壓縮方法&#xff0c;包含批量壓縮、在線壓縮、免費壓縮等多種方式&#xff0c;大家按需自取哈~ 方法一&#xff1a;嗨格式壓縮大師 這是一個可…

Kotlin Executors線程池newSingleThreadExecutor單線程

Kotlin Executors線程池newSingleThreadExecutor單線程 import java.util.concurrent.Executorsfun main() {val mExecutorService Executors.newSingleThreadExecutor()for (i in 1..5) {mExecutorService.execute {println("seq-$i tid:${Thread.currentThread().threa…

typeScript 之 基礎

工具: PlayGround 源碼&#xff1a; GitHub TypeScript 變量聲明 typeScript中變量聲明注意&#xff1a; 開頭不能以數字開頭變量名稱可以包含數字和字母除了下劃線_和美元$符號外&#xff0c;不能包含其他任意特殊字符 聲明的結構&#xff1a; let 變量名&#xff1a; 類型…

面試經典150題——羅馬數字轉整數

羅馬數字包含以下七種字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 數值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#x…

docker 學習-- 01 基礎知識

docker 學習-- 01 基礎知識 文章目錄 docker 學習-- 01 基礎知識1.前言1.1 docker 是什么1.2 docker優點1.2.1 統一開發和生產環境:1.2.2 高性能:1.2.3 更輕松的維護和拓展&#xff1a;1.2.4 更輕松的遷移&#xff1a; 1.3 docker缺點1.3.1 運行環境受限1.3.2 文件管理和網絡端…

item_sku-獲取sku詳細信息

一、接口參數說明&#xff1a; item_sku-獲取sku詳細信息&#xff0c;點擊更多API調試&#xff0c;請移步注冊API賬號點擊獲取測試key和secret 公共參數 請求地址: https://api-gw.onebound.cn/taobao/item_sku 名稱類型必須描述keyString是調用key&#xff08;點擊獲取測試…

安全中間件的設計思路和簡單實踐

rasp 的侵入式特性和攔截特性導致開發和運維普通不太愿意配合&#xff0c;當生產環境出現問題時往往第一時間先把責任推給 rasp&#xff0c;逐漸的安全部門普遍只能把 rasp 設置為告警模式&#xff0c;而且越是大的集群攔截開的就越少&#xff0c;所以字節的 elkeid 和某外賣大…

P13-CNN學習1.3-ResNet(神之一手~)

論文地址:CVPR 2016 Open Access Repository https://arxiv.org/pdf/1512.03385.pdf Abstract 翻譯 深層的神經網絡越來越難以訓練。我們提供了一個殘差學習框架用來訓練那些非常深的神經網絡。我們重新定義了網絡的學習方式&#xff0c;讓網絡可以直接學習輸入信息與輸出信息…

Python-OpenCV中的圖像處理-圖像直方圖

Python-OpenCV中的圖像處理-圖像直方圖 圖像直方圖統計直方圖繪制直方圖Matplotlib繪制灰度直方圖Matplotlib繪制RGB直方圖 使用掩膜統計直方圖直方圖均衡化Numpy圖像直方圖均衡化OpenCV中的直方圖均衡化CLAHE 有限對比適應性直方圖均衡化 2D直方圖OpenCV中的2D直方圖Numpy中2D…

代碼隨想錄算法訓練營20期|第七天|哈希表part02|454.四數相加II ● 383. 贖金信 ● 15. 三數之和 ● 18. 四數之和 ● 總結

454.四數相加II 比較巧思的解法&#xff0c;先把nums1 和nums2的數兩兩相加&#xff0c;并存儲sum和次數 再在nums3和nums4里找對應和sum和為0的數值i,j Time: N^2 Space:N^2, 最壞情況下A和B的值各不相同&#xff0c;相加產生的數字個數為 n^2 class Solution {public int fo…

Spring AOP實踐:如何通過aop記錄日志?

目錄 一、依賴 二、自定義注解 三、切面 一、依賴 以SpringBoot工程為例&#xff0c;導入aop的依賴。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 二…

為什么要自動化Web測試?

Web自動化是更快地實現所需結果的較佳方式。自動化測試在市場上引起了巨大的轟動。此軟件測試過程可以讓您使用正確的自動化測試工具和技術集自動執行測試過程。我們執行它是為了檢查軟件應用程序是否具有完全按照我們希望它執行的方式執行的勇氣。 比以往更快地獲得反饋 自動化…

基于Promise.resolve實現Koa請求隊列中間件

本文作者為360奇舞團前端工程師 前言 最近在做一個 AIGC 項目&#xff0c;后端基于 Koa2 實現。其中有一個需求就是調用兄弟業務線服務端 AIGC 能力生成圖片。但由于目前兄弟業務線的 AIGC 項目也是處于測試階段&#xff0c;能夠提供的服務器資源有限&#xff0c;當并發請求資源…

kafka和rabbitmq之間的區別以及適用場景

Kafka 和 RabbitMQ 都是流行的消息傳遞系統&#xff0c;用于實現分布式系統中的消息傳遞、事件處理和數據流。它們在設計和適用場景上有一些不同&#xff0c;下面詳細介紹它們之間的區別和適用場景。 Kafka 特點和優勢&#xff1a; 高吞吐量&#xff1a; Kafka 的設計目標是實…

【Java】數據交換 Json 和 異步請求 Ajax

&#x1f384;歡迎來到邊境矢夢的csdn博文&#xff0c;本文主要講解Java 中 數據交換和異步請求 Json&Ajax 的相關知識&#x1f384; &#x1f308;我是邊境矢夢&#xff0c;一個正在為秋招和算法競賽做準備的學生&#x1f308; &#x1f386;喜歡的朋友可以關注一下&#…

go mod 添加私有庫GOPRIVATE

私有地址 形式倉庫域名/組織名形式倉庫域名形式*倉庫域名 示例私有地址&#xff1a; gitee.com/takujo_admin 或者igitlab.com 多個私有地址,分割&#xff0c;示例&#xff1a; gitee.com,igitlab.com 修改env go env -w GOPRIVATE"私有地址" go env -w …

conda創建虛擬環境

創建虛擬環境是在計算機上設置一個獨立的空間&#xff0c;用于安裝和運行特定版本的軟件和依賴項&#xff0c;以避免與系統其他部分的沖突。 創建虛擬環境&#xff1a; conda create --name myenv python3.8 這將創建一個名為myenv的虛擬環境&#xff0c;并安裝Python 3.8版本。…

pwm接喇叭搞整點報時[keyestudio的8002模塊]

雖然現在查看時間很方便&#xff0c;但是其實好像我的時間觀念卻越來越差。于是決定搞一個整點報時&#xff0c;時常提醒自己時光飛逝&#xff0c;不要老是瞎墨跡。 這篇主要講一下拼裝方式和配置&#xff0c;就差不多了。不涉及什么代碼。3針的元器件&#xff0c;去掉正負接線…