javascript 计算值所占的百分比

硅谷探秘者 Md 前端 1133 0 0

js 计算值所占的百分比:

function getPercentValue(arr){
        //求和
        let sum = 0;
        if(sum <= 0){
            for (let i = 0; i < arr.length; i++) {
                sum += arr[i];
            }
        }
        //10的2次幂是100,用于计算精度。
        let digits = 1;
        //扩大比例100
        let votesPerQuota = [];
        for(let i = 0; i < arr.length; i++){
            let val = arr[i] / sum * digits * 100;
            votesPerQuota[i] = val;
        }
        //总数,扩大比例意味的总数要扩大
        let targetSeats = digits * 100;
        //再向下取值,组成数组
        let seats = [];
        for(let i = 0; i < votesPerQuota.length; i++){
            seats[i] = Math.floor(votesPerQuota[i]);
        }
        //再新计算合计,用于判断与总数量是否相同,相同则占比会100%
        let currentSum = 0;
        for (let i = 0; i < seats.length; i++) {
            currentSum += seats[i];
        }
        //余数部分的数组:原先数组减去向下取值的数组,得到余数部分的数组
        let remainder = [];
        for(let i = 0; i < seats.length; i++){
            remainder[i] = votesPerQuota[i] - seats[i];
        }
        while(currentSum < targetSeats){
            let max = 0;
            let maxId = 0;
            for(let i = 0;i < remainder.length;++i){
                if(remainder[i] > max){
                    max = remainder[i];
                    maxId = i;
                }
            }
            //对最大项余额加1
            ++seats[maxId];
            //已经增加最大余数加1,则下次判断就可以不需要再判断这个余额数。
            remainder[maxId] = 0;
            //总的也要加1,为了判断是否总数是否相同,跳出循环。
            ++currentSum;
        }
        // 这时候的seats就会总数占比会100%
        return seats;
    }

let res = getPercentValue([99,90,77,10])
console.log(res);

输出:[36, 32, 28, 4]


评论区
请写下您的评论...
暂无评论...
猜你喜欢
java基础,算法基础 1000 输入一个整数数组a,输出一个同样长度数组b表示对应a数组各个位置上元素a数组总。publicstaticdouble[]getPercentValue(int[]arr){//求和
工具 5330 publicstaticvoidmain(String[]args){ inta=3;intb=9;NumberFormatnumberFormat=NumberFormat.getInstance();numberFormat.setMaximumFractionDigits(2);Stringresult=numberFormat.format((float)a/(float)b*100);S
前端(h5) 2903 定义和用法splice()方法向/从数组中添加/删除项目,然后返回被删除项目。注意:该方法会改变原始数组。语法arrayObject.splice(index,howmany,item1
nginx,前端,java基础 1998   基于javanio+netty+websocket+protobuf+javascript等技术实现前后端高性能实时数据传输demo模型。  github地址:https
前端,javascript 1625 较点 普通函数 箭头函数 简写 箭头函数如果没有参数,同时函数体返回只有一句,则{}和return都可以省略。 this指向 this总是指向调用它对象,如果作为构造函数
official 1449   基于javanio+netty+websocket+protobuf+javascript等技术实现前后端高性能实时数据传输demo模型。  github地址:https
前端(h5) 2287 javascript代码实现scripttype="text/javascript"document.addEventListener('copy',function(event
前端(h5) 3331 语法:varmap=newMap();属性:size返回集合中元素数量方法:clear从映射中移除有元素。delete从映射中移除指定元素。forEach对映射中每个元素执行指定操作。get
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。