javaScript大数相加算法

本文讨论了JavaScript在处理大整数时可能出现的精度损失问题,并提出了使用字符串保存大整数以避免精度损失的建议。通过示例展示了直接用数字类型进行大整数加法运算会导致错误结果,而转换为字符串进行拼接则能正确保留数字。同时,提供了一个自定义函数`bigSumAdd`实现大整数相加,遵循了类似于小学加法的进位规则,确保了运算准确性。
摘要由CSDN通过智能技术生成

JS 在存放整数的时候是有一个安全范围的,一旦数字超过这个范围便会损失精度。

我们不能拿精度损失的数字进行运行,因为运算结果一样是会损失精度的。
最好是用字符串来保存数字,不用数字类型
如果我们直接加

let a = "12345678901234567891111111111111111111111111111111111111111111111111111111";
let b = "12345678901234567891111111111111111111111111111111111111111111111111111111";
console.log(a + b);

是字符串的话就会拼接;
在这里插入图片描述
如果直接用数字

let a = 12345678901234567891111111111111111111111111111111111111111111111111111111;
let b = 12345678901234567891111111111111111111111111111111111111111111111111111111;			
console.log(a + b);

会得出这样, 不利于下次运算了
在这里插入图片描述
思路: 先拆分成可直接操作得对象,按小学一年级学来得数学加法;个位数加到十位进一;

function bigSumAdd(a = 0, b = 0){
	if(typeof a !== 'string') a += '';
	if(typeof b !== 'string') b += '';
	a = a.split('');
	b = b.split('');
	let len = 0;
	let t = 0,
	    f = 0,
	    k =0,
	    arr = [];
	if(a.length > b.length){
		len = a.length - b.length;
		for(let i = 0; i < len; i++){
			b.unshift(0);
		}
	}else{
		len = b.length - a.length;
		for(let i = 0; i < len; i++){
			a.unshift(0);
		}
	}
	for(let i = a.length - 1; i >= 0; i--){
		t = parseInt(a[i]) + parseInt(b[i]) + f;
		k = t;
		if(t >= 10){
			t = t % 10;
			f = 1;
		}else{
			f = 0;
		}
		arr.unshift(t);
		if(i === 0 && k >= 10){
			arr[0] = arr[0] % 10;
			arr.unshift(1);
		}
	}
	return arr.join('');
}

输入

结果
在这里插入图片描述
结论: 在日常开发中是很难遇到这么大得数字的,但也不可避免;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值