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生態(tài)系統(tǒng)加速eslint解析器使用實例探索
這篇文章主要為大家介紹了JS生態(tài)系統(tǒng)加速之eslint解析器使用實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
基于js與flash實現(xiàn)的網(wǎng)站flv視頻播放插件代碼
這篇文章主要介紹了基于js與flash實現(xiàn)的網(wǎng)站flv視頻播放插件代碼,該功能在很多網(wǎng)站上都有著廣泛的應(yīng)用,本文以實例形式對其進行介紹,需要的朋友可以參考下2014-10-10
原生JavaScript再網(wǎng)頁實現(xiàn)文本轉(zhuǎn)語音功能
這篇文章主要為大家詳細介紹了如何通過原生JavaScript再網(wǎng)頁實現(xiàn)文本轉(zhuǎn)語音功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2025-03-03
javascript解決innerText瀏覽器兼容問題思路代碼
innerText瀏覽器兼容這塊始終都是一個問題,下面與大家分享下使用javascript解決,感興趣的朋友可以參考下哈,希望對你有所幫助2013-05-05
javascript教程:關(guān)于if簡寫語句優(yōu)化的方法
這篇文章主要介紹了js中if簡寫語句優(yōu)化的方法,需要的朋友可以參考下2014-05-05
javascript實現(xiàn)詳細時間提醒信息效果的方法
這篇文章主要介紹了javascript實現(xiàn)詳細時間提醒信息效果的方法,涉及javascript操作時間的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03

