js百分比计算相加后精度问题

该代码段定义了一个函数per_arry,它接收一个数组作为输入,计算其中大于0的值的总和,并根据这些值计算百分比。如果值全为0或只有一个大于0,返回原数组。否则,对于每个元素,根据其在总和中的比例计算百分比,处理JavaScript中的精度问题。最后返回结果数组。
摘要由CSDN通过智能技术生成
//arry要计算的数组
const per_arry = arry => {
  const lenders_age_arry = arry;
  let lenders_tol = 0;

  let gt_zero = 0; //判断几个值大于0
  let res_arry = []; //最终结果

  let last_gt_index = 0; //存放最后一个大于0的值所在的索引
  let befor_num_sum = 0; //除最后一个,将之前大于0的百分值相加
  lenders_age_arry.forEach((value, index) => {
    if (value > 0) {
      gt_zero++;
      last_gt_index = index;
      lenders_tol = lenders_tol + parseFloat(value);
    }
  });

  if (gt_zero == 0 || gt_zero == 1) {
    //全值都是0 或者 只有一个值时
    res_arry = lenders_age_arry;
  }
  if (gt_zero > 1) {
    lenders_age_arry.forEach((value, index) => {
      if (value > 0) {
        if (last_gt_index == index) {
          res_arry.push(Math.round((100 - befor_num_sum) * 100) / 100);
        } else {
          res_arry.push(Math.round(parseFloat((value / lenders_tol) * 10000)) / 100);
          befor_num_sum = befor_num_sum + Math.round(parseFloat((value / lenders_tol) * 10000)) / 100;
        }
      } else {
        res_arry.push(0);
      }
    });
  }

  return res_arry;
};
调用:per_arry(12.03,25,46)
注意:js在进行加减运算时,可能会有点问题,如:
0.2+0.3=0.500000001 //正确应该是0.5
100-51.12=48.8799999 //正确应该是48.88
解决方法:
(Math.round( (100-51.12)*100 ))/100  //结果就是48.88
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值