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

解決超出JS的安全整數(shù)的限制范圍問題

 更新時(shí)間:2024年08月30日 14:52:14   作者:攻^城^獅  
這篇文章主要介紹了解決超出JS的安全整數(shù)的限制范圍問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

解決超出JS的安全整數(shù)的限制范圍

JavaScript 能夠準(zhǔn)確表示的整數(shù)范圍在-2^53到 2^53之間,超過這個(gè)范圍,無法精確表示這個(gè)值。

Number.MIN_SAFE_INTEGER //-9007199254740991
Number.MAX_SAFE_INTEGER // 9007199254740991

此時(shí)用到 json-bigint將后端返回?cái)?shù)據(jù)處理處理之后才能正常使用:

  • 1.項(xiàng)目需要安裝的依賴
> npm i json-bigint
  • 2.引入json-bigint文件
>import JSONbig from 'json-bigint'

transformResponse是將后端返回的原始數(shù)據(jù)進(jìn)行處理

下面使用 : try-catch 來捕獲異常

因?yàn)椋汉蠖朔祷氐臄?shù)據(jù)可能不是 JSON 格式字符串,如果不是則將data數(shù)據(jù)原封不動(dòng)的直接返回給請(qǐng)求使用

const request = axios.create({
  baseURL: '', // 請(qǐng)求的基礎(chǔ)路徑
  transformResponse: [function (data) {
    try {
      return JSONbig.parse(data)
    } catch (err) {
      return data
    }
  }]
  })

請(qǐng)求回來的數(shù)據(jù)使用.toString() 即可獲取

request({
	method:'GET',//請(qǐng)求方法
	url:'',//請(qǐng)求路徑
	params: {},//請(qǐng)求參數(shù)拼接在url上面
}).then(res=>{
			console.log(res.data.id.toString())
			})

JS實(shí)現(xiàn)超范圍的數(shù)相加

在js中能表示的最大安全整數(shù)是 9007199254740991,可以用API Number.MAX_SAFE_INTEGER 看一下

超出范圍就會(huì)發(fā)生精度丟失,像這樣

解決方法

相當(dāng)于一個(gè)字符串相加的問題。不能把數(shù)字簡(jiǎn)單的相加,需要倒序取數(shù)字的每一位,進(jìn)行相加,大于等于10,進(jìn)1,小于10,進(jìn)0,把結(jié)果保存在一個(gè)字符串中。

注意點(diǎn):

  • 1、要考慮長(zhǎng)度不一樣
  • 2、要考慮進(jìn)位,所以需要倒序來相加

代碼如下:

function add(a,b){
    // 保存最終結(jié)果
    var res='';

    // 保存兩位相加的結(jié)果 和 進(jìn)位值
    var c=0;

    // 字符串轉(zhuǎn)數(shù)組
    a = a.split('');
    b = b.split('');

    while (a.length || b.length || c){
        // ~~ 用來把String類型 轉(zhuǎn)為 Number類型
        // 把兩位相加的結(jié)果 和 進(jìn)位值相加
        // pop方法返回?cái)?shù)組的最后一位,并刪除
        c += ~~a.pop() + ~~b.pop();

        // 取余,把余數(shù)拼接到最終結(jié)果中
        res = c % 10 + res;

        // 保存進(jìn)位,true 或者 false
        c = c>9;
    }
    return res;
}
add('11111111111111111','22222222222222222');

解釋:

1、~ 是JavaScript中的操作符,按位非

~~ 經(jīng)常用來進(jìn)行取整和類型轉(zhuǎn)換,他和顯示的用Number進(jìn)行類型轉(zhuǎn)換還是有區(qū)別的,比如處理 undefined 的時(shí)候。

而在兩個(gè)大整數(shù),長(zhǎng)度不一樣的時(shí)候,其中一個(gè)數(shù) 已經(jīng) pop 了所有數(shù)組中的元素之后,還要pop的話,就會(huì)返回 undefined ,所以如果用 Number 顯示的轉(zhuǎn)化,起碼要寫成這樣。

var ai = a.pop();
ai = ai===undefined? 0:Number(ai);

var bi = b.pop();
bi = bi===undefined? 0:Number(bi);

c += ai + bi;

明顯是用 ~~ 方便。

2、在保存進(jìn)位值的時(shí)候,用的并不是 1 和 0 ,而是true 和 false,這是因?yàn)殡[式類型轉(zhuǎn)換的時(shí)候,true會(huì)轉(zhuǎn)為1,false會(huì)轉(zhuǎn)為0。

總結(jié)

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

相關(guān)文章

  • 原生JS實(shí)現(xiàn)的輪播圖功能詳解

    原生JS實(shí)現(xiàn)的輪播圖功能詳解

    這篇文章主要介紹了原生JS實(shí)現(xiàn)的輪播圖功能,結(jié)合實(shí)例形式分析了javascript實(shí)現(xiàn)輪播圖的原理、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • Fetch超時(shí)設(shè)置與終止請(qǐng)求詳解

    Fetch超時(shí)設(shè)置與終止請(qǐng)求詳解

    這篇文章主要給大家介紹了關(guān)于Fetch超時(shí)設(shè)置與終止請(qǐng)求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Fetch具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • JavaScript中代理與反射的用法詳解

    JavaScript中代理與反射的用法詳解

    JavaScript作為一門靈活而強(qiáng)大的語言,提供了代理(Proxy)與反射(Reflect)這兩個(gè)元編程工具,它們?yōu)殚_發(fā)者提供了更深層次的語言控制和操作,在本篇博客中,我們將深入研究代理與反射的概念、用法,以及如何巧妙地結(jié)合它們來實(shí)現(xiàn)高級(jí)的編程技巧,需要的朋友可以參考下
    2023-12-12
  • Bootstrap圖片輪播組件Carousel使用方法詳解

    Bootstrap圖片輪播組件Carousel使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Bootstrap圖片輪播組件Carousel使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • layui-table表復(fù)選框勾選的所有行數(shù)據(jù)獲取的例子

    layui-table表復(fù)選框勾選的所有行數(shù)據(jù)獲取的例子

    今天小編就為大家分享一篇layui-table表復(fù)選框勾選的所有行數(shù)據(jù)獲取的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 用javascript實(shí)現(xiàn)記錄來賓姓名的代碼

    用javascript實(shí)現(xiàn)記錄來賓姓名的代碼

    用javascript實(shí)現(xiàn)記錄來賓姓名的代碼...
    2007-03-03
  • iframe父頁(yè)面獲取子頁(yè)面參數(shù)的方法

    iframe父頁(yè)面獲取子頁(yè)面參數(shù)的方法

    這篇文章主要介紹了iframe父頁(yè)面獲取子頁(yè)面參數(shù)的方法,需要的朋友可以參考下
    2014-02-02
  • JS中使用TextDecoder解碼二進(jìn)制數(shù)據(jù)(數(shù)據(jù)流的逐步解碼)

    JS中使用TextDecoder解碼二進(jìn)制數(shù)據(jù)(數(shù)據(jù)流的逐步解碼)

    JS中使用TextDecoder將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為可讀文本字符串,首先,創(chuàng)建TextDecoder對(duì)象,使用decode()方法,解碼為字符串,,{stream:true}選項(xiàng)允許處理流式數(shù)據(jù),適用于大型數(shù)據(jù)流的逐步解碼,TextDecoder廣泛應(yīng)用于WebSocket通信、文件讀取、網(wǎng)絡(luò)響應(yīng)等場(chǎng)景
    2024-10-10
  • TypeScript中定義變量方式以及數(shù)據(jù)類型詳解

    TypeScript中定義變量方式以及數(shù)據(jù)類型詳解

    TypeScript支持 JavaScript的所有語法和語義,同時(shí)通過作為ECMAScript的超集來提供一些額外的功能,如類型檢測(cè)和更豐富的語法,這篇文章主要給大家介紹了關(guān)于TypeScript中定義變量方式以及數(shù)據(jù)類型詳解的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 使用HTML5+Boostrap打造簡(jiǎn)單的音樂播放器

    使用HTML5+Boostrap打造簡(jiǎn)單的音樂播放器

    這篇文章主要介紹了使用HTML5+Boostrap打造簡(jiǎn)單的音樂播放器 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08

最新評(píng)論