JS数字太大计算不精准的问题解决思路记录

一、问题描述

在做项目的过程中,遇到数字很大的时候,相加的数字总是转为整数,例如14位整数加4位小数的数字相加99999999999999.9999+99999999999999.9999,得出的结果为200000000000000,于是乎为了解决这个问题,我写了以下方法。


二、整体思路

通过截取数字的方式实现,就是整数和整数相加,小数和小数相加,然后进行字符串拼接


三、实现步骤

比如1.55 + 2.66
1、首先截取小数点前面的整数进行相加得到s1(1+2=3),然后截取小数点后面的数字相加得到s2(55+66=121)
2、s2 除以 10^小数的位数得到s3(121/10^2 = 1.21)
3、然后通过split再对s3进行分割,分割成s4(1) 和  s5(21)
4、最后通过s1和s3相加然后字符串拼接上小数点和s5,最终结果result = (s1+s3)+ '.' + s5   (即3+1+'.'+21 = 4.21)
贴上代码,仅供参考,如有不对的地方,望指出~

function sum(arr,index){//arr数组;index整数,小数的位数
  var result = 0,integer = 0,decimal = 0,decimalInt = 0,decimalDec = 0,tmpDecimal;
  for (var i = 0; i < arr.length; i++) {
      if (arr[i].indexOf('.') > 0) {
          var tempArr = arr[i].split(".");
          integer += Number(tempArr[0]);
          decimal += Number('0.'+tempArr[1])*Math.pow(10,index);
      } else {
           integer += Number(arr[i]);
      }
  }
  tmpDecimal = (decimal/Math.pow(10,index)).toString().split('.');
  decimalInt = Number(tmpDecimal[0]);
  if (tmpDecimal.length == 2) {
      decimalDec = tmpDecimal[1];
      result = (integer+decimalInt)+'.'+decimalDec;
  } else {
      result = integer+decimalInt;
  }
  return result;
}
console.log(sum(['99999999999999.9999','99999999999999.9999'],4));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值