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 相关文章推荐
JavaScript setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
基于jquery DOM写的类似微博发布的效果
Oct 20 Javascript
JavaScript var声明变量背后的原理示例解析
Oct 12 Javascript
window.onload绑定多个事件的两种解决方案
May 15 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
May 24 Javascript
js获取隐藏元素的宽高
Feb 24 Javascript
React学习笔记之条件渲染(一)
Jul 02 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
Jan 16 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
Oct 18 Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 Javascript
vue swipe自定义组件实现轮播效果
Jul 03 Javascript
jquery插件实现图片悬浮
Apr 16 jQuery
使表格的标题列可左右拉伸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多个版本的分析解释
2011/07/21 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
prototype1.4中文手册
2006/09/22 Javascript
索趣科技的答案
2007/02/07 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
详解Python3 pickle模块用法
2019/09/16 Python
python字符串反转的四种方法详解
2019/12/02 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
试用期转正鉴定评语
2014/01/27 职场文书
志愿者宣传口号
2014/06/17 职场文书
一般党员对照检查材料
2014/09/24 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
Python中for后接else的语法使用
2021/05/18 Python
Mybatis是这样防止sql注入的
2021/12/06 Java/Android