日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

加法伺候?

//超過20位數值相加----------------------------------------
function bigNumAdd(a, b) {if (!(typeof a === "string" && typeof b === "string")) return console.log("傳入參數必須為字符串類型");if (a.includes("+") || a.includes("-") || b.includes("+") || b.includes("-")) return console.log("傳參不要夾帶正負符號+、-");var aArr = a.toString().split("");var bArr = b.toString().split("");var temporary = []; //臨時值//比較大小長度,aArr的值要比bArr的值要大if (bArr.length > aArr.length) {//實現兩值的調換temporary = aArr;aArr = bArr;bArr = temporary;} else if (bArr.length === aArr.length) {//比較數組里面的值var flag = true; //默認aArr比bArr的值大var length = bArr.length;for (var i = 0; i < length; i++) {var numObj = parseInt(aArr[i]);var addObj = parseInt(bArr[i]);if (numObj > addObj) {break;} else if (numObj < addObj) {flag = false;break;}}if (!flag) {//實現兩值的調換temporary = aArr;aArr = bArr;bArr = temporary;}}for (var i = aArr.length - 1; i >= 0; i--) { //從后面算起var numObj = parseInt(aArr[i]);var addObj = parseInt(bArr[i - (aArr.length - bArr.length)]);if (!isNaN(addObj)) {if (numObj + addObj >= 10) {aArr[i] = numObj + addObj - 10;if (i - 1 < 0) {//如果是90+10的話,超出了數組的范圍aArr.splice(0, 0, 1);} else {for (var j = i - 1; j >= 0; j--) { //從后面算起var obj = parseInt(aArr[j]);if (obj + 1 === 10) {aArr[j] = 0;if (j === 0) {//循環到最后一個,將aArr數組加上最前面1// splice(position, aOfItemsToRemove, item)// 拼接函數(索引位置, 要刪除元素的數量, 元素)aArr.splice(0, 0, 1);i++; //數組的長度已經改變,將循環再次加多一次break;}} else {aArr[j] = obj + 1;break;}}}} else {aArr[i] = numObj + addObj;}}}return aArr.join("");
}console.log(bigNumAdd("999999999999999999999999", "999999999999999999999998"));//1999999999999999999999997
console.log(bigNumAdd("999999999999999999999999", "99999999999999999999998"));//1099999999999999999999997
console.log(bigNumAdd("1", "999999999999999999999999"));//1000000000000000000000000
console.log(bigNumAdd("1000000000000000000000000", "1"));//1000000000000000000000001

?

減法

//超過20位數值相減----------------------------------------
function bigNumSub(a, b) {if (a === b) return "0";if (!(typeof a === "string" && typeof b === "string")) return console.log("傳入參數必須為字符串類型");if (a.includes("+") || a.includes("-") || b.includes("+") || b.includes("-")) return console.log("傳參不要夾帶正負符號+、-");function lt(a, b) {if (a.length < b.length) {return true;} else if (a.length === b.length) {return a < b;} else {return false;}}let isMinus = false;if (lt(a, b)) {[a, b] = [b, a];isMinus = true;}let len = Math.max(a.length, b.length);a = a.padStart(len, 0);b = b.padStart(len, 0);let flag = 0,result = "",temp;for (let i = len - 1; i >= 0; i--) {temp = parseInt(a[i]) - flag - parseInt(b[i]);if (temp < 0) {result = 10 + temp + result;flag = 1;} else {result = temp + result;flag = 0;}}result = (isMinus ? "-" : "") + result.replace(/^0+/, "");return result;
}console.log(bigNumSub("999999999999999999999999", "999999999999999999999998"));//1
console.log(bigNumSub("999999999999999999999999", "99999999999999999999998"));//900000000000000000000001
console.log(bigNumSub("1", "999999999999999999999999"));//-999999999999999999999998
console.log(bigNumSub("1000000000000000000000001", "1000000000000000000000000"));//1

總結

以上是生活随笔為你收集整理的数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。