亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決后端傳long類型數(shù)據(jù)到前端精度丟失問題

 更新時(shí)間:2024年01月30日 09:58:40   作者:源末coco  
這篇文章主要介紹了解決后端傳long類型數(shù)據(jù)到前端精度丟失問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

后端傳long類型數(shù)據(jù)到前端精度丟失

在 Spring Boot 中,將 long 類型傳輸?shù)角岸藭r(shí),會(huì)發(fā)現(xiàn)該類型的值可能會(huì)出現(xiàn)精度丟失的問題。

這是因?yàn)樵?JavaScript 中,數(shù)字類型默認(rèn)會(huì)被轉(zhuǎn)換為雙精度浮點(diǎn)數(shù),而雙精度浮點(diǎn)數(shù)的精度有限,只能精確表示 2 的 53 次方以內(nèi)(即 Number.MAX_SAFE_INTEGER,約為 9 x 10^15)的整數(shù)。

對于超過該范圍的長整數(shù),JavaScript 會(huì)發(fā)生精度丟失,導(dǎo)致值變得不準(zhǔn)確。

解決方案一

將 long 轉(zhuǎn)換為字符串

1:在后端將 long 類型的值轉(zhuǎn)換為字符串類型,可以使用 String.valueOf() 方法或者 Long.toString() 方法

如下所示:

long num = 123456789012345L;
String str = String.valueOf(num);
// 或者
String str = Long.toString(num);

2:在前端通過 AJAX 請求獲取該字符串類型的值,并將其解析為數(shù)字類型。

由于 JavaScript 中的數(shù)值類型默認(rèn)使用 IEEE 754 標(biāo)準(zhǔn)的雙精度浮點(diǎn)數(shù)表示,因此需要使用 JavaScript 的 BigInt() 方法將其轉(zhuǎn)換為大整數(shù)類型。

let str = "123456789012345";
let num = BigInt(str);

解決方案二

使用第三方庫進(jìn)行高精度運(yùn)算

1:在后端將 long 類型的值轉(zhuǎn)換為 BigDecimal 類型(Java 中的高精度類型),并通過 JSON 序列化后傳遞到前端。

這里以 Spring Boot 中使用 FastJSON 序列化為例

如下所示:

BigDecimal num = new BigDecimal("123456789012345");
String jsonStr = JSON.toJSONString(num);

2:在前端使用第三方庫 big.jsbignumber.js 進(jìn)行高精度運(yùn)算。

這里以 big.js 為例,首先需要引入 big.min.js 文件,在代碼中使用 Big() 類構(gòu)造高精度對象,并進(jìn)行相應(yīng)的運(yùn)算。

<script src="big.min.js"></script>
let num = new Big("123456789012345");
let result = num.plus(1);

還可以使用注解來解決long類型的精度丟失問題

Spring Boot 中提供了 @JsonFormat 注解,可以對實(shí)體類中的屬性進(jìn)行序列化和反序列化格式化。

對于 long 類型的屬性,可以設(shè)置其格式為字符串類型,并在前端進(jìn)行相應(yīng)的處理,以保持其精度不丟失。

具體實(shí)現(xiàn)方式

1:在實(shí)體類中添加 @JsonFormat 注解,設(shè)置其 shape 屬性為 JsonFormat.Shape.STRING

如下所示:

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

2:在前端獲取該值時(shí),直接使用字符串類型進(jìn)行處理

如下所示:

let numStr = data.num;

Spring Boot 中可以通過配置文件來解決 long 類型的精度丟失問題。

在 Spring Boot 的配置文件 application.properties 中添加如下配置:

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
# 將 long 類型序列化為字符串類型
spring.jackson.serialization.WRITE_NUMBERS_AS_STRINGS=true

其中,

  • WRITE_DATES_AS_TIMESTAMPS 表示是否將日期類型序列化為時(shí)間戳類型,默認(rèn)為 true,這里設(shè)置為 false 如果需要將日期類型序列化為時(shí)間戳類型,則不需要設(shè)置此屬性。
  • WRITE_NUMBERS_AS_STRINGS 則表示是否將數(shù)字類型序列化為字符串類型,默認(rèn)為 false,這里設(shè)置為 true 即可將 long 類型序列化為字符串類型。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java常見的四種負(fù)載均衡算法

    Java常見的四種負(fù)載均衡算法

    本文主要介紹了Java常見的四種負(fù)載均衡算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java實(shí)現(xiàn)商品管理系統(tǒng)

    java實(shí)現(xiàn)商品管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)商品管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • java 使用HttpURLConnection發(fā)送數(shù)據(jù)簡單實(shí)例

    java 使用HttpURLConnection發(fā)送數(shù)據(jù)簡單實(shí)例

    這篇文章主要介紹了java 使用HttpURLConnection發(fā)送數(shù)據(jù)簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • RocketMQ?Broker如何保存消息源碼解析

    RocketMQ?Broker如何保存消息源碼解析

    這篇文章主要為大家介紹了RocketMQ源碼分析Broker如何保存消息詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 一文帶你掌握J(rèn)ava8中函數(shù)式接口的使用和自定義

    一文帶你掌握J(rèn)ava8中函數(shù)式接口的使用和自定義

    函數(shù)式接口是?Java?8?引入的一種接口,用于支持函數(shù)式編程,下面我們就來深入探討函數(shù)式接口的概念、用途以及如何創(chuàng)建和使用函數(shù)式接口吧
    2023-08-08
  • Spring/SpringBoot?@RequestParam注解無法讀取application/json格式數(shù)據(jù)問題解決

    Spring/SpringBoot?@RequestParam注解無法讀取application/json格式數(shù)據(jù)問題

    RequestParam用于將指定的請求參數(shù)賦值給方法中的形參,可以接受簡單類型屬性,也可以接受對象類型,一般用于GET請求,下面這篇文章主要給大家介紹了關(guān)于Spring/SpringBoot?@RequestParam注解無法讀取application/json格式數(shù)據(jù)問題解決的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • Java BigDecimal案例詳解

    Java BigDecimal案例詳解

    這篇文章主要介紹了Java BigDecimal案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解Java8中Optional的常見用法

    詳解Java8中Optional的常見用法

    Opitonal是java8引入的一個(gè)新類,目的是為了解決空指針異常問題。本文將通過示例為大家詳細(xì)講講Optional的常見用法,需要的可以參考一下
    2022-09-09
  • Java的System.getProperty()方法獲取大全

    Java的System.getProperty()方法獲取大全

    這篇文章主要介紹了Java的System.getProperty()方法獲取大全,羅列了System.getProperty()方法獲取各類信息的用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • Java的函數(shù)式接口@FunctionalInterface的使用說明

    Java的函數(shù)式接口@FunctionalInterface的使用說明

    這篇文章主要介紹了Java的函數(shù)式接口@FunctionalInterface的使用說明,我們常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface注解,需要的朋友可以參考下
    2024-01-01

最新評(píng)論