欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js大數(shù)相加出現(xiàn)精度丟失、運(yùn)算錯(cuò)誤的問(wèn)題

 更新時(shí)間:2023年08月06日 10:47:10   投稿:yin  
js中數(shù)字類(lèi)型長(zhǎng)度達(dá)到16位時(shí),進(jìn)行加減乘除運(yùn)算,會(huì)出現(xiàn)精度丟失,運(yùn)算結(jié)果錯(cuò)誤的問(wèn)題,本文講述精度丟失的原因及解決辦法

js中數(shù)字類(lèi)型長(zhǎng)度達(dá)到16位時(shí),進(jìn)行加減乘除運(yùn)算,會(huì)出現(xiàn)精度丟失,運(yùn)算結(jié)果錯(cuò)誤的問(wèn)題,本文講述精度丟失的原因及解決辦法。

數(shù)字類(lèi)型Number轉(zhuǎn)換超過(guò)16位精度丟失

Number轉(zhuǎn)換16位正常;Number轉(zhuǎn)換17位精度丟失,16位以后的數(shù)字都會(huì)轉(zhuǎn)換成0。

網(wǎng)上資料說(shuō):js的number類(lèi)型有個(gè)最大安全值,即2的53次方(9007199254740992),超過(guò)這個(gè)值就會(huì)出現(xiàn)精度丟失的問(wèn)題。

上面這個(gè)說(shuō)法還是不準(zhǔn)確的,應(yīng)該是超過(guò)16位出現(xiàn)精度丟失,16位以后的數(shù)字都會(huì)轉(zhuǎn)換成0。

解決方案

1、使用BigInt 轉(zhuǎn)換數(shù)字

BigInt是一種內(nèi)置對(duì)象,它提供了一種方法來(lái)表示大于 2^53 - 1 的整數(shù)。這原本是 Javascript中可以用Number表示的最大數(shù)字。BigInt 可以表示任意大的整數(shù)

BigInt轉(zhuǎn)換后要進(jìn)行加減乘除運(yùn)算的話,另一個(gè)也必須要經(jīng)過(guò)BigInt 轉(zhuǎn)換,示例如下

let str = '1161453901956706780';
let num= BigInt(str) + BigInt(1);
console.log(String(num));
console.log(String(num).split('n')[0]);

2、轉(zhuǎn)換成字符串,自定義函數(shù)

自定義函數(shù)sumBigNumber(a, b),注意這里的參數(shù)a和b都是字符串。

function sumBigNumber(a, b) {
    var res = '',temp = 0;
    a = a.split('');
    b = b.split('');
    while (a.length || b.length || temp) {
        temp += ~~a.pop() + ~~b.pop();
        res = (temp % 10) + res;
        temp = temp > 9;
    }
    return res.replace(/^0+/, '');
}

到此這篇關(guān)于js大數(shù)相加出現(xiàn)精度丟失、運(yùn)算錯(cuò)誤的問(wèn)題的文章就介紹到這了,更多相關(guān)js大數(shù)相加精度丟失內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論