最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

解決方案一

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

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

如下所示:

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

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

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

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

解決方案二

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

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

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

如下所示:

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

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

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

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

還可以使用注解來(lái)解決long類(lèi)型的精度丟失問(wèn)題

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

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

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

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

如下所示:

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

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

如下所示:

let numStr = data.num;

Spring Boot 中可以通過(guò)配置文件來(lái)解決 long 類(lèi)型的精度丟失問(wèn)題。

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

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

其中,

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

總結(jié)

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

相關(guān)文章

  • 基于SpringMVC @RequestMapping的參數(shù)和用法

    基于SpringMVC @RequestMapping的參數(shù)和用法

    這篇文章主要介紹了SpringMVC @RequestMapping的參數(shù)和用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring通過(guò)配置文件管理Bean對(duì)象的方法

    Spring通過(guò)配置文件管理Bean對(duì)象的方法

    這篇文章主要介紹了Spring通過(guò)配置文件管理Bean對(duì)象的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Spring的@PropertySource注解源碼解析

    Spring的@PropertySource注解源碼解析

    這篇文章主要介紹了Spring的@PropertySource注解源碼解析,就以源碼時(shí)序圖的方式,直觀的感受下@PropertySource注解在Spring源碼層面的執(zhí)行流程,需要的朋友可以參考下
    2023-11-11
  • Struts2修改上傳文件大小限制方法解析

    Struts2修改上傳文件大小限制方法解析

    這篇文章主要介紹了Struts2修改上傳文件大小限制的相關(guān)內(nèi)容,包括決定Struts2上傳文件大小的因素,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • Java原生服務(wù)器接收上傳文件 不使用MultipartFile類(lèi)

    Java原生服務(wù)器接收上傳文件 不使用MultipartFile類(lèi)

    這篇文章主要為大家詳細(xì)介紹了Java原生服務(wù)器接收上傳文件,不使用MultipartFile類(lèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • SpringBoot生成和操作PDF的代碼詳解

    SpringBoot生成和操作PDF的代碼詳解

    本文主要介紹了在SpringBoot項(xiàng)目下,通過(guò)代碼和操作步驟,詳細(xì)的介紹了如何操作PDF,希望可以幫助到準(zhǔn)備通過(guò)JAVA操作PDF的你,項(xiàng)目框架用的SpringBoot,但在JAVA中代碼都是通用的,需要的朋友可以參考下
    2025-01-01
  • SpringBoot使用AOP記錄接口操作日志詳解

    SpringBoot使用AOP記錄接口操作日志詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用AOP記錄接口操作日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • java虛擬機(jī)學(xué)習(xí)筆記進(jìn)階篇

    java虛擬機(jī)學(xué)習(xí)筆記進(jìn)階篇

    在本篇內(nèi)容里小編給大家分享了關(guān)于java虛擬機(jī)學(xué)習(xí)筆記的進(jìn)階內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • Java讀取properties文件內(nèi)容的幾種方式詳解

    Java讀取properties文件內(nèi)容的幾種方式詳解

    這篇文章主要介紹了Java讀取properties文件內(nèi)容的幾種方式詳解,讀取properties配置文件在實(shí)際的開(kāi)發(fā)中使用的很多,本文來(lái)介紹常用的幾種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2023-11-11
  • 分析Spring框架之設(shè)計(jì)與實(shí)現(xiàn)資源加載器

    分析Spring框架之設(shè)計(jì)與實(shí)現(xiàn)資源加載器

    Spring框架是由于軟件開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。然而,Spring的用途不僅僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合性角度而言,絕大部分Java應(yīng)用都可以從Spring中受益。今天來(lái)分析它的設(shè)計(jì)與實(shí)現(xiàn)資源加載器,從Spring.xml解析和注冊(cè)Bean對(duì)象
    2021-06-06

最新評(píng)論

桃园县| 海晏县| 内丘县| 明水县| 保康县| 阿克| 乌拉特中旗| 科尔| 河间市| 依安县| 乌拉特前旗| 嘉义市| 玛纳斯县| 江永县| 黄石市| 武清区| 准格尔旗| 彭阳县| 登封市| 收藏| 贵港市| 博湖县| 浮山县| 唐河县| 丰宁| 曲阳县| 包头市| 衢州市| 利川市| 芦山县| 雅江县| 呼和浩特市| 平阴县| 苏尼特左旗| 大庆市| 怀远县| 广宗县| 定州市| 莎车县| 凤冈县| 溧阳市|