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 相关文章推荐
jQuery.query.js 取参数的两点问题分析
Aug 06 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
Oct 15 Javascript
jquery滚动到顶部底部代码
Apr 20 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
Oct 15 Javascript
jQuery双向列表选择器select版
Nov 01 Javascript
Angular.Js的自动化测试详解
Dec 09 Javascript
Vue数据驱动模拟实现3
Jan 11 Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 Javascript
Vue.js 2.x之组件的定义和注册图文详解
Jun 19 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
Jun 19 Javascript
JS+Canvas实现五子棋游戏
Aug 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
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
JavaScript版代码高亮
2006/06/26 Javascript
Javascript - HTML的request类
2007/01/09 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
Python实现端口检测的方法
2018/07/24 Python
浅析python参数的知识点
2018/12/10 Python
Django stark组件使用及原理详解
2019/08/22 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
生物化工专业个人自荐信
2013/09/26 职场文书
模范教师事迹材料
2014/02/10 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
大班上学期个人总结
2015/02/13 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技