JavaScript做大整數(shù)加法計(jì)算的代碼實(shí)現(xiàn)
前言
本文將帶大家去了解前端如何做大整數(shù)加法計(jì)算
安全值
在做大整數(shù)計(jì)算之前,我們先介紹一下安全值
由于 JavaScript 的 Number 類型使用 IEEE 754 雙精度浮點(diǎn)數(shù)表示數(shù)字由于 JavaScript 的 Number 類型使用 IEEE 754 雙精度浮點(diǎn)數(shù)表示數(shù)字
- 最小安全整數(shù):
-2^53 + 1,即-(2^53 - 1),等于-9007199254740991 - 最大安全整數(shù):
2^53 - 1,即9007199254740991
也就是說(shuō)超出這個(gè)值的計(jì)算,前端直接計(jì)算會(huì)出現(xiàn)安全問(wèn)題
所以es6之后才打造了bigint用于做大整數(shù)的計(jì)算
代碼實(shí)現(xiàn)
- bigint
- 我們當(dāng)然可以直接使用es6提供的bigint去做大整數(shù)的計(jì)算
// 定義大整數(shù)
const largeNumber1 = BigInt("111111111111111111111111111111");
const largeNumber2 = BigInt("222222222222222222222222222222");
// 加法
const sum = largeNumber1 + largeNumber2;
console.log("Sum:", sum.toString()); // 輸出: Sum: 333333333333333333333333333333
// 減法
const difference = largeNumber2 - largeNumber1;
console.log("Difference:", difference.toString()); // 輸出: Difference: 111111111111111111111111111111
// 乘法
const product = largeNumber1 * largeNumber2;
console.log("Product:", product.toString()); // 輸出: Product: 246913580246913580246913580246913580246913580246913580
// 除法
const quotient = largeNumber2 / largeNumber1;
console.log("Quotient:", quotient.toString()); // 輸出: Quotient: 2
// 取余
const remainder = largeNumber2 % largeNumber1;
console.log("Remainder:", remainder.toString()); // 輸出: Remainder: 111111111111111111111111111111
BigInt 不能與普通的 Number 類型直接混合運(yùn)算。如果需要,可以將 Number 轉(zhuǎn)換為 BigInt:
```js const num = 10; const bigIntResult = largeNumber1 + BigInt(num); ```
- 不使用
bigint
雖然可以使用bigint簡(jiǎn)單明了的解決這個(gè)問(wèn)題
但是這個(gè)時(shí)候你就會(huì)聽(tīng)到面試官說(shuō):“我就要你不用bigint給我做出來(lái)”
這個(gè)時(shí)候你就可以和面試官說(shuō):“你是不是S。。。啊不,我當(dāng)然可以做出來(lái)的呀,我這就給您寫出來(lái)代碼呀,請(qǐng)稍等呀,面試官大人”
function add(num1, num2){
let result = "";
let carry = 0
let i = num1.length - 1
let j = num2.length - 1
while(i >= 0 || j >= 0 ){
// 獲取當(dāng)前位的數(shù)字
let digit1 = parseInt(num1[i])
let digit2 = parseInt(num2[j])
// 拿到當(dāng)前位的結(jié)果
let sum = digit1 + digit2 + carry
let currentDigit = sum % 10
result = currentDigit + result
// 計(jì)算進(jìn)位
carry = Math.floor(sum / 10)
i--
j--
}
// 返回字符串結(jié)果
return result
}function add(num1, num2){
let result = "";
let carry = 0
let i = num1.length - 1
let j = num2.length - 1
while(i >= 0 || j >= 0 ){
// 獲取當(dāng)前位的數(shù)字
let digit1 = parseInt(num1[i])
let digit2 = parseInt(num2[j])
// 拿到當(dāng)前位的結(jié)果
let sum = digit1 + digit2 + carry
let currentDigit = sum % 10
result = currentDigit + result
// 計(jì)算進(jìn)位
carry = Math.floor(sum / 10)
i--
j--
}
// 返回字符串結(jié)果
return result
}
const num1 = "111111111111111111111111111111";
const num2 = "111121111211112111121111211112";
const sum = add(num1, num2);
console.log("Sum: ", sum);
可以看到結(jié)果也是沒(méi)得問(wèn)題的

到此這篇關(guān)于JavaScript做大整數(shù)加法計(jì)算的代碼實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)JavaScript大整數(shù)加法計(jì)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js網(wǎng)頁(yè)側(cè)邊隨頁(yè)面滾動(dòng)廣告效果實(shí)現(xiàn)
其實(shí)這個(gè)效果不是什么難實(shí)現(xiàn)的效果,關(guān)鍵注意幾個(gè)地方就可以了2011-04-04
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本...2006-09-09
js獲取UserControl內(nèi)容為拼html時(shí)提供方便
js獲取UserControl內(nèi)容時(shí)無(wú)法測(cè)試通過(guò),原來(lái)是繼承了Page 然后使用VerifyRenderingInServerForm驗(yàn)證2014-11-11
JS中如何判斷傳過(guò)來(lái)的JSON數(shù)據(jù)中是否存在某字段
這篇文章主要介紹了JS中如何判斷傳過(guò)來(lái)的JSON數(shù)據(jù)中是否存在某字段,需要的朋友可以參考下2014-08-08
微信小程序開(kāi)發(fā)之實(shí)現(xiàn)搖色子游戲
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)微信小程序開(kāi)發(fā)一個(gè)簡(jiǎn)單的搖色子游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以和小編一起學(xué)習(xí)一下2023-01-01
JavaScript通過(guò)filereader接口讀取文件
這篇文章主要為大家詳細(xì)介紹了通過(guò)filereader接口讀取文件,使用readAsDataURL方法預(yù)覽圖片的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
javascript刪除html標(biāo)簽函數(shù)cIsHTML
這篇文章主要介紹了javascript刪除html標(biāo)簽函數(shù)cIsHTML,需要的朋友可以參考下2017-01-01

