JavaScript实现大数的运算


Posted in Javascript onNovember 24, 2014

对于非常大或非常小的数,可以用科学记数法表示浮点值。采用科学记数法,可以把一个数表示为数字加e/E,后面加乘以10的倍数,如:

var num1 = 3.125e7; // 31250000 var num2 = 3e-17; // 0.00000000000000003

进行特别大的数的加减运算,可以使用字符串+科学记数法的方法来进行,如:

// 这里只考虑大整数的情况,不考虑小数 function strAdd(sNum1, sNum2){ 

  /*增加一位数位以记录最高位进一的情况*/

  var sNum1 = ['0', sNum1].join(''), sNum2 = ['0', sNum2].join(''); 

   /*给短的数字字符串加补0*/

  var len1 = sNum1.length, len2 = sNum2.length, 

    zeroArr = function(len){ 

      var arr = new Array(len), i=len; 

      while(i--){arr[i] = 0;} 

      return arr; 

    }; 

   if(len1 > len2){ 

    var arrTemp = zeroArr(len1 - len2); 

    arrTemp.push(sNum2), 

    sNum2 = arrTemp.join(''); 

  } 

  else if(len2 > len1){ 

    var arrTemp = zeroArr(len2 - len1); 

    arrTemp.push(sNum1), 

    sNum1 = arrTemp.join(''); 

  } 

    /*将字符串转换为数组,以相应数位来相加*/

  var arr1 = sNum1.split(''), arr2 = sNum2.split(''); 

   var arrAddRes = new Array(arr1.length), i=arr1.length; 

   var andone = 0, // 低位相加是否进一     cur1, cur2, curAdd; 

   while(i--){ 

    cur1 = +arr1[i], cur2 = +arr2[i]; 

    curAdd = cur1+cur2+andone; 

    if(10 > curAdd) 

      arrAddRes[i] = curAdd, 

      andone = 0; 

    else

      arrAddRes[i] = +curAdd.toString().slice(1,2), 

      andone = 1; 

  } 

   if(!andone){ // 最后是否进一,否则截取前面的0     arrAddRes.splice(0,1); 

  } 

    /*数组截取前19位如果有,用科学记数法来表示这个结果*/

  var keeplen = 19; // js的小数只保留小数点后的18位   var eAfter = arrAddRes.length - 1; // e后面的倍数部分   var eBefore, eBeforeStr = '';      // e前面的小数部分 

  if(keeplen < arrAddRes.length) 

    eBeforeStr = [arrAddRes[0], '.', arrAddRes.slice(1, keeplen).join('')].join(''); 

  else

    eBeforeStr = [arrAddRes[0], '.', arrAddRes.slice(1).join('')].join(''); 

   eBefore = +eBeforeStr; 

   return [Number(arrAddRes.join('')), eBefore, eAfter]; 

} 

 strAdd('1234567890', '9876543210'); // -> [1111111100, 1.1111111, 9]

代码如上了,是不是也很简单呢。

Javascript 相关文章推荐
DD_belatedPNG,IE6下PNG透明解决方案(国外)
Dec 06 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
js加入收藏以及使用Jquery更改透明度
Jan 26 Javascript
jQuery的deferred对象详解
Nov 12 Javascript
javascript实现简单的html5视频播放器
May 06 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
Jun 07 Javascript
Node.JS利用PhantomJs抓取网页入门教程
May 19 Javascript
基于jquery.page.js实现分页效果
Jan 01 jQuery
基于Node的Axure文件在线预览的实现代码
Aug 28 Javascript
在Koa.js中实现文件上传的接口功能
Oct 08 Javascript
Vue组件通信入门之Provide和Inject机制
Dec 29 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 Javascript
使表格的标题列可左右拉伸jquery插件封装
Nov 24 #Javascript
jQuery实现隔行背景色变色
Nov 24 #Javascript
jQuery实现统计复选框选中数量
Nov 24 #Javascript
基于jQuery实现文本框缩放以及上下移动功能
Nov 24 #Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 #Javascript
基于jQuery实现下拉框
Nov 24 #Javascript
基于jQuery实现表单提交验证
Nov 24 #Javascript
You might like
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
Python Deque 模块使用详解
2014/07/04 Python
简单介绍Python中的len()函数的使用
2015/04/07 Python
python aiohttp的使用详解
2019/06/20 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
python生成器用法实例详解
2019/11/22 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
Python Django view 两种return的实现方式
2020/03/16 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
简单英文演讲稿
2014/01/01 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
学前教育见习总结
2015/06/23 职场文书
python神经网络Xception模型
2022/05/06 Python