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
也就是說超出這個(gè)值的計(jì)算,前端直接計(jì)算會(huì)出現(xià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
簡單明了的解決這個(gè)問題
但是這個(gè)時(shí)候你就會(huì)聽到面試官說:“我就要你不用bigint
給我做出來”
這個(gè)時(shí)候你就可以和面試官說:“你是不是S。。。啊不,我當(dā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é)果也是沒得問題的
到此這篇關(guān)于JavaScript做大整數(shù)加法計(jì)算的代碼實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)JavaScript大整數(shù)加法計(jì)算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js網(wǎng)頁側(cè)邊隨頁面滾動(dòng)廣告效果實(shí)現(xiàn)
其實(shí)這個(gè)效果不是什么難實(shí)現(xiàn)的效果,關(guān)鍵注意幾個(gè)地方就可以了2011-04-04Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本...2006-09-09js獲取UserControl內(nèi)容為拼html時(shí)提供方便
js獲取UserControl內(nèi)容時(shí)無法測試通過,原來是繼承了Page 然后使用VerifyRenderingInServerForm驗(yàn)證2014-11-11JS中如何判斷傳過來的JSON數(shù)據(jù)中是否存在某字段
這篇文章主要介紹了JS中如何判斷傳過來的JSON數(shù)據(jù)中是否存在某字段,需要的朋友可以參考下2014-08-08微信小程序開發(fā)之實(shí)現(xiàn)搖色子游戲
這篇文章主要為大家詳細(xì)介紹了如何通過微信小程序開發(fā)一個(gè)簡單的搖色子游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以和小編一起學(xué)習(xí)一下2023-01-01javascript刪除html標(biāo)簽函數(shù)cIsHTML
這篇文章主要介紹了javascript刪除html標(biāo)簽函數(shù)cIsHTML,需要的朋友可以參考下2017-01-01