网站建设合作协议书,手机百度网页版主页,淘宝指数,珠海网站制作网络公司主要用于计算一个数组中某个值占总和的百分比#xff0c;并且保留指定的小数位数 function getPercentValue(arrList, index, precision) {
// arrList要计算数据的数组
// index要计算数组中值的下表
// precision百分比保留几位小数#xff0c;默认保留2位小数
// 判断是否… 主要用于计算一个数组中某个值占总和的百分比并且保留指定的小数位数 function getPercentValue(arrList, index, precision) {
// arrList要计算数据的数组
// index要计算数组中值的下表
// precision百分比保留几位小数默认保留2位小数
// 判断是否为空if (!arrList[index]) {return 0}if (!precision) precision 2
// 求和const sum arrList.reduce(function (acc, val) {return acc (isNaN(val) ? 0 : val)}, 0)if (sum 0) {return 0}
// 10的2次幂是100用于计算精度。const digits Math.pow(10, precision)
// 扩大比例100const votesPerQuota arrList.map(function (val) {return ((isNaN(val) ? 0 : val) / sum) * digits * 100})
// 总数扩大比例意味的总数要扩大const targetSeats digits * 100
// 再向下取值组成数组const seats votesPerQuota.map(function (votes) {return Math.floor(votes)})
// 再新计算合计用于判断与总数量是否相同相同则占比会100%let currentSum seats.reduce(function (acc, val) {return acc val}, 0)
// 余数部分的数组原先数组减去向下取值的数组得到余数部分的数组const remainder votesPerQuota.map(function (votes, index) {return votes - seats[index]})
// 给最大最大的余额加1凑个占比100%while (currentSum targetSeats) {
// 找到下一个最大的余额给其加1let max Number.NEGATIVE_INFINITYlet maxId nullfor (let i 0, len remainder.length; i len; i) {if (remainder[i] max) {max remainder[i]maxId i}}
// 对最大项余额加1seats[maxId]
// 已经增加最大余数加1则下次判断就可以不需要再判断这个余额数。remainder[maxId] 0
// 总的也要加1为了判断是否总数是否相同跳出循环。currentSum}
// 这时候的seats就会总数占比会100%return seats[index] / digits
}使用
const arr [10, 20, 30, 40];
const index 2;
const precision 2;const percent getPercentValue(arr, index, precision);
console.log(percent); // 输出30
相关文章: