博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript如何实现大数的运算
阅读量:6094 次
发布时间:2019-06-20

本文共 1751 字,大约阅读时间需要 5 分钟。

  hot3.png

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

var num1 = 3.125e7; // 31250000var 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 [String(arrAddRes.join('')), eBefore, eAfter];}strAdd('1234567890', '9876543210'); // -> [1111111100, 1.1111111, 9]

转载于:https://my.oschina.net/luozt/blog/311397

你可能感兴趣的文章
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>
设计模式(十一):FACADE外观模式 -- 结构型模式
查看>>
iOS xcodebuile 自动编译打包ipa
查看>>
程序员眼中的 SQL Server-执行计划教会我如何创建索引?
查看>>
【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
查看>>
cmake总结
查看>>
数据加密插件
查看>>
linux后台运行程序
查看>>