ps:大整数相加通道:juejin.cn/post/695119…
$.extend({
/**
* 大整数相减
* ## 确认数字大小: 判断两个数字转换后数组长度:长度一致需要进行判断处理
* ## 减法每次取出数组最后一个元素进行相减,考虑借位
* @param bigNumberA String 类型
* @param bigNumberB String 类型
*/
handlebigNumSub: function (bigNumberA, bigNumberB) {
let numberArrA = bigNumberA.split('');
let numberArrB = bigNumberB.split('');
let isABigB = numberArrA.length > numberArrB.length;//根据数组长度比较数字大小
let maxLength = numberArrA.length > numberArrB.length ? numberArrA.length : numberArrB.length;
if (numberArrA.length == numberArrB.length) {//数组长度一致,根据顺位比较俩数字大小
for (let i = 0; i < maxLength; i++) {
if (numberArrA[i] > numberArrB[i]) {
isABigB = true;
break;//跳出循环
};
}
}
if (!isABigB) {//是否交换数组
numberArrA = [numberArrB,numberArrB = numberArrA][0];
};
let subResult = '';
while (maxLength) {
let subItem = parseInt(numberArrA.pop()) - parseInt(numberArrB.pop() || 0);//各取最后一项进行计算
if (subItem >= 0) {
subResult = String(subItem) + subResult;
} else {//负数向上借位(即加 10 处理)
subResult = String(subItem + 10) + subResult;
numberArrA[maxLength - 2]--;//向上借位(maxlength 与 numberArrA 长度一致,由于先进行 pop 操作,maxlength 未自减;所以此处需要 -2 获取 numberArrA 最后一项)
}
maxLength--;
};
return (isABigB ? '' : '-') + subResult;
}
})