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:;与javascript:void(0)使用介绍
Jun 05 Javascript
jquery easyui滚动条部分设置介绍
Sep 12 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
May 08 Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 Javascript
微信小程序 数据遍历的实现
Apr 05 Javascript
JavaScrpt的面向对象全面解析
May 09 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
js操作二进制数据方法
Mar 03 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
Apr 28 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
May 13 Javascript
JavaScript在web自动化测试中的作用示例详解
Aug 25 Javascript
javascript+css实现进度条效果
Mar 25 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代码质量36计
2012/09/05 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python实现的Excel文件读写类
2015/07/30 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
Python如何发布程序的详细教程
2018/10/09 Python
python看某个模块的版本方法
2018/10/16 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
python交互模式基础知识点学习
2020/06/18 Python
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
static关键字的用法
2013/10/07 面试题
辩论赛主持词
2014/03/18 职场文书
2014年班主任自我评价范文
2014/04/23 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
工作失误检讨书范文
2015/01/26 职场文书
龙门石窟导游词
2015/02/02 职场文书
Python图像处理之图像拼接
2021/04/28 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技