Closed amenzai closed 6 years ago
/** * 计算两个大数的和 * @param {[Number]} a [数值A] * @param {[Number]} b [数值B] * @return {String]} [大数和] */ function sumBIgNum(a, b) { var l1 = 0, l2 = 0, lt, // 参数小数点位数 result = '', // 保存最终结果字符串 carry = 0, // 保存进位 tmpArr = []; // 临时数组 // 获取小数位数开始 try { l1 = a.toString().split('.')[1].length } catch(e) {} try { l2 = b.toString().split('.')[1].length } catch(e) {} lt = Math.max(l1, l2); // 获取小数位数结束 a = (a * Math.pow(10, lt)).toString().split(''); b = (b * Math.pow(10, lt)).toString().split(''); while (a.length || b.length || carry) { // 对每一项相加 carry += ~~a.pop() + ~~b.pop(); // ~~'1'等 1 ~~undefined 等 0 ~~'2.33' 等 2 result = carry % 10 + result; // 每一项相加后的个位 carry = carry > 9 ? 1 : 0; // 每一项相加和大于10进1 } result.replace(/^0+/, ''); // 去除最终结果前面的'0' tmpArr = result.split(''); if (lt > 0) { tmpArr.splice(-lt, 0, '.'); result = tmpArr.join(''); } return result; }