//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
js百分比计算相加后精度问题
于 2023-05-25 11:52:28 首次发布
该代码段定义了一个函数per_arry,它接收一个数组作为输入,计算其中大于0的值的总和,并根据这些值计算百分比。如果值全为0或只有一个大于0,返回原数组。否则,对于每个元素,根据其在总和中的比例计算百分比,处理JavaScript中的精度问题。最后返回结果数组。
摘要由CSDN通过智能技术生成