加法伺候

//超过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位的数字)相加减运算。相关推荐

  1. 科学数字_Excel分列时拒绝让超过15位的数字变成科学计数法

    分列时让超过15位的数字不变成科学计数法 Excel情报局 生产搬运分享Excel基础技能 Excel知识青年 用1%的Excel基础搞定99%的日常工作 做一个有文艺范的Excel公众号 Excel ...

  2. Excel分列时拒绝让超过15位的数字变成科学计数法

    Excel分列时拒绝让超过15位的数字变成科学计数法 大家有没有遇到这种情况: 对一些含有15位数字以上的内容的单元格进行分列时,分列后会形成科学计数法的错误格式. 如下图所示,选中A1单元格,点击数 ...

  3. 【大数据技术应用实战】【大数据与人工智能视角下数字孪生和元宇宙】二、新一轮大数据与人工智能变革

    目录 一.数字孪生和元宇宙的量化特征 二.新一轮大数据与人工智能变革 三.元学习和机器自动建模新时代 过去的几轮:大数据与人工智能--小数据.大数据.深智能 在数字孪生和元宇宙中,形态从"明 ...

  4. 清华大数据软件成果亮相第三届数字中国建设峰会成果展览

    10月12日到14日,由国家互联网信息办公室.国家发展和改革委员会.工业和信息化部.福建省人民政府共同主办的第三届数字中国建设峰会在福州举办.清华大学积极响应国家数字经济发展战略,连续三年应邀参加&q ...

  5. 盘古开源:从大数据时代信息安全,洞察数字经济发展趋势

    当前,大数据正在成为信息时代的核心战略资源,对国家治理能力.经济运行机制.社会生活方式产生深刻影响.与此同时,各项技术应用背后的数据安全风险也日益凸显.近年来,有关数据泄露.数据窃听.数据滥用等安全事 ...

  6. 降低 Spark 计算成本 50.18 %,使用 Kyligence 湖仓引擎构建云原生大数据底座,为计算提速 2x

    2023 中国开源未来发展峰会于 5 月 13 日成功举办.在大会开源原生商业分论坛,Kyligence 解决方案架构高级总监张小龙发表<云原生大数据底座演进 >主题演讲,向与会嘉宾介绍了 ...

  7. 报错解决:ninja: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ninja)

    这个报错是因为手动编译安装gcc/g++后没有更新头文件,解决方法有2个. 一个是临时的解决方案: export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRAR ...

  8. Excel报错“不能使用对象链接和嵌入”并无法粘贴数据可能和输入法有关

    目录 记一次莫名其妙的故障排除 一.故障出现过程 二.原因排除过程 (一)盗版软件? (二)OFFICE冲突? (三)设置不对? (四)软件冲突? 三.解决过程 记一次莫名其妙的故障排除 电脑:联想Y ...

  9. Vue突然报错 doesn‘t work properly without JavaScript enabled

    突然报错未启用JavaScript 下午演示项目的时候突然给我整了一出JavaScript未启用,当场就把我整尴尬了: 然后我怀疑是不是写的路由守卫有问题就注释了再试 发现问题还在?! 然后经过各种骚 ...

最新文章

  1. 2021年三大顶会时间序列论文代码整理
  2. arcgis flex aqi 3大util
  3. HDU - 2871 Memory Control(线段树+区间合并)好题!
  4. jstl 处理Date 时间
  5. 剑指offer七:两个链表的第一个公共结点
  6. Boost升压电路调试
  7. SEO助手-免费万能SEO网站优化小助手
  8. 入手STM32单片机的知识点总结
  9. 『互联网架构』软件架构-软件系统设计(一)
  10. jQuery UI 实例 - 滑块(Slider)
  11. java poi 段落行间距_java - Apache poi XWPF Paragraph行间距 - 堆栈内存溢出
  12. Visual Studio 编译器修改IDE背景图片
  13. 本地调试微信之内网穿透 ngrok/frp
  14. Chrome 无法显示网页 错误码:STATUS_INVALID_IMAGE_HASH
  15. c语言程序设计精品课课件,C语言程序设计 精品课课件(全套讲义).ppt
  16. 南京大学计算机学院商琳,【开甲书院】南京大学开甲书院顺利召开2020级新生年级大会...
  17. 基于阿里云服务器ECS和宝塔面板,适合初学者的蚂蚁笔记(Leanote)超详细配置教程(但是真的不好用)
  18. Unity游戏存档 (将游戏数据储存至本地文档)
  19. TDMS数据 读取/转换/保存 为MATLAB/Python 可读取的通用数据格式的的方法
  20. 国网配电站房智能辅控系统改造无人值守

热门文章

  1. CentOS的el5, el6, el7代表什么
  2. 中国互联网+光伏建筑一体化行业商业模式创新与投资机会深度报告
  3. 机器学习入门(11)— 反向传播的加法节点、乘法节点、加法层代码实现、乘法层代码实现
  4. ROOT android 原理。 基于(zergRush)
  5. JavaScript(转载)
  6. ChineseCalendar类[转]
  7. php引用php,PHP7引入的??和?:的区别讲解
  8. java类型转换面试题_JavaSE:数据类型之间的转换(附常见面试题)
  9. java查看内存地址_Java内存机制和内存地址
  10. java criteria限制条数_java架构—Oracle SQL性能优化