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中的style.cssText使用教程
Nov 06 Javascript
js实现图片漂浮效果的方法
Mar 02 Javascript
jQuery中大家不太了解的几个方法
Mar 04 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
Jun 18 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
Vue动态组件实例解析
Aug 20 Javascript
vue实现一个炫酷的日历组件
Oct 08 Javascript
基于Vue全局组件与局部组件的区别说明
Aug 11 Javascript
js动态生成表格(节点操作)
Jan 12 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 表单验证实现代码
2009/03/10 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
php实现简单四则运算器
2020/11/29 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
医院见习报告范文
2014/11/03 职场文书
中学生思想品德评语
2014/12/31 职场文书
学前教育见习总结
2015/06/23 职场文书
母亲节主题班会
2015/08/14 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
详解flex:1什么意思
2022/07/23 HTML / CSS