JavaScript做大整數(shù)加法計算的代碼實現(xiàn)
前言
本文將帶大家去了解前端如何做大整數(shù)加法計算
安全值
在做大整數(shù)計算之前,我們先介紹一下安全值
由于 JavaScript 的 Number 類型使用 IEEE 754 雙精度浮點數(shù)表示數(shù)字由于 JavaScript 的 Number 類型使用 IEEE 754 雙精度浮點數(shù)表示數(shù)字
- 最小安全整數(shù):
-2^53 + 1,即-(2^53 - 1),等于-9007199254740991 - 最大安全整數(shù):
2^53 - 1,即9007199254740991
也就是說超出這個值的計算,前端直接計算會出現(xiàn)安全問題
所以es6之后才打造了bigint用于做大整數(shù)的計算
代碼實現(xiàn)
- bigint
- 我們當(dāng)然可以直接使用es6提供的bigint去做大整數(shù)的計算
// 定義大整數(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 類型直接混合運算。如果需要,可以將 Number 轉(zhuǎn)換為 BigInt:
```js const num = 10; const bigIntResult = largeNumber1 + BigInt(num); ```
- 不使用
bigint
雖然可以使用bigint簡單明了的解決這個問題
但是這個時候你就會聽到面試官說:“我就要你不用bigint給我做出來”
這個時候你就可以和面試官說:“你是不是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
// 計算進位
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
// 計算進位
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ù)加法計算的代碼實現(xiàn)的文章就介紹到這了,更多相關(guān)JavaScript大整數(shù)加法計算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js網(wǎng)頁側(cè)邊隨頁面滾動廣告效果實現(xiàn)
其實這個效果不是什么難實現(xiàn)的效果,關(guān)鍵注意幾個地方就可以了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時提供方便
js獲取UserControl內(nèi)容時無法測試通過,原來是繼承了Page 然后使用VerifyRenderingInServerForm驗證2014-11-11
JS中如何判斷傳過來的JSON數(shù)據(jù)中是否存在某字段
這篇文章主要介紹了JS中如何判斷傳過來的JSON數(shù)據(jù)中是否存在某字段,需要的朋友可以參考下2014-08-08
javascript刪除html標簽函數(shù)cIsHTML
這篇文章主要介紹了javascript刪除html標簽函數(shù)cIsHTML,需要的朋友可以參考下2017-01-01

