当前位置: 首页 > news >正文

js字符串最大长度_JS 实现两个大数相加?

0fe3b7e942cedf3871a36d44443b5216.png

当有两个整数 a 和 b ,在通常情况下我们有“+”运算符对其进行相加运算:

let sum = a + b;

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

我们不能拿精度损失的数字进行运行,因为运算结果一样是会损失精度的。

所以,我们要用字符串来表示数据!(不会丢失精度)

JS 中整数的最大安全范围可以查到是:9007199254740991

假如我们要进行 9007199254740991 + 1234567899999999999

我们要先准备两个字符串变量和一个方法:

let a = "9007199254740991";
let b = "1234567899999999999";

function add(a ,b){
   //...
}

然后将字符串长度对齐:

let a = "9007199254740991";
let b = "1234567899999999999";

function add(a ,b){
   //取两个数字的最大长度
   let maxLength = Math.max(a.length, b.length);
   //用0去补齐长度
   a = a.padStart(maxLength , 0);//"0009007199254740991"
   b = b.padStart(maxLength , 0);//"1234567899999999999"
}

然后从个位开始相加:

let a = "9007199254740991";
let b = "1234567899999999999";

function add(a ,b){
   //取两个数字的最大长度
   let maxLength = Math.max(a.length, b.length);
   //用0去补齐长度
   a = a.padStart(maxLength , 0);//"0009007199254740991"
   b = b.padStart(maxLength , 0);//"1234567899999999999"
   //定义加法过程中需要用到的变量
   let t = 0;
   let f = 0;   //"进位"
   let sum = "";
   for(let i=maxLength-1 ; i>=0 ; i--){
      t = parseInt(a[i]) + parseInt(b[i]) + f;
      f = Math.floor(t/10);
      sum = t%10 + sum;
   }
   if(f == 1){
      sum = "1" + sum;
   }
   return sum;
}

运行:

add(a ,b); //结果为:1243575099254740990

End.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 获取网站的实时股票数据
  • python3 自定义函数无法被调用_Access查询中如何调用自定义函数
  • excel hutool 增加标题_Hutool Java 工具类库导出 Excel,超级简单!
  • 关于工作
  • mysql db host类型_MySQL的基本使用相关知识
  • mysql到底可不可以用join_到底可不可以使用join?
  • 在 Windows Mobile 上使用 GDI+
  • python class namedtuple 效率_Python数据结构:一个被低估的Namedtuple(一)
  • 在Tech Ed上要看到的Sync Service for ADO.NET
  • python具有可嵌入性_python基础第一节
  • 壮壮出世了
  • mysql数据库中本体数据_基于关系型数据库的本体持久化
  • 使用Ghost32.exe进行点对点计算机克隆
  • python正则通配符_通配符、正则表达式、python去重
  • 深入研究Windows内部原理系列(视频)(微软制造)
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Bootstrap JS插件Alert源码分析
  • ECMAScript入门(七)--Module语法
  • iOS 系统授权开发
  • Java 网络编程(2):UDP 的使用
  • Laravel核心解读--Facades
  • mysql中InnoDB引擎中页的概念
  • Node 版本管理
  • nodejs:开发并发布一个nodejs包
  • orm2 中文文档 3.1 模型属性
  • PAT A1050
  • Spark学习笔记之相关记录
  • ubuntu 下nginx安装 并支持https协议
  • underscore源码剖析之整体架构
  • Vue组件定义
  • 从0到1:PostCSS 插件开发最佳实践
  • 对象引论
  • 分布式事物理论与实践
  • 复习Javascript专题(四):js中的深浅拷贝
  • 开源SQL-on-Hadoop系统一览
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 用Visual Studio开发以太坊智能合约
  • Nginx实现动静分离
  • 阿里云重庆大学大数据训练营落地分享
  • # 达梦数据库知识点
  • # 数仓建模:如何构建主题宽表模型?
  • #162 (Div. 2)
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (ros//EnvironmentVariables)ros环境变量
  • (WSI分类)WSI分类文献小综述 2024
  • (第27天)Oracle 数据泵转换分区表
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .net core 管理用户机密
  • .net MySql
  • .NET/C# 使用反射注册事件