1 大数相加问题
因为 js的 Number 是IEEE 754标准的64-bits的双精度数值,就是说在 2^53即以内的整数都是精确的,但是超过了这个范围就会出现精度丢失,最大安全值是2^53-1
解决方法的思路是以字符串的形式按位来相加,即我们平时计算加法一样,个位与个位相加,超过十就进一位的思路
let sumBig = function(a,b){
a = a.split('') ;
b = b.split('') let alength = a.length;
let blength = b.length;
if(alength>blength){
for(let i=0;i<(alength-blength);i++){
b.unshift('0')
}
}else if(blength>alength){
for(let i=0;i<blength-alength+1;i++){
a.unshift('0')
}
}
//⬆使位数相同,不足的用0填充
let newArr = [];//初步结果数组
//初步相加⬇
for(let i=0;i<a.length;i++){
newArr[i] = Number(a[i])+Number(b[i]);
}
var n = 0; //进位
//⬇大于10的位数进一位
for(let i = 0;i<newArr.length;i++){
if(i===newArr.length-1){
newArr[newArr.length-i-1] = (newArr[newArr.length-i-1]+n)
}else{
if(newArr[newArr.length-i-1]+n>9){
newArr[newArr.length-i-1] = (newArr[newArr.length-i-1]+n)%10;
n=1
}else{
newArr[newArr.length-i-1] = newArr[newArr.length-i-1]+n;
n=0;
}
}
}
return newArr.join('')
}
let rusult1 = sumBig('9999999999999999999999999','9999')
console.log(rusult1)
2 手写模版字符串方法
//模版字符串
const temple = "I'm {{name}}. I'm {{age}} years old.";
const data = { name: "aa", age: "10" };
String.prototype.render = function (data) {
return this.replace(/{{(.*?)}}/g, (match, key) => data[key.trim()]);
};
const result = temple.render(data);