精华内容
下载资源
问答
  • js最大余额法

    2020-07-09 14:25:29
    js最大余额法:解决百分比和不到100%的问题 //valueList要计算的数组 //idx要计算数组中值的下表 //precision百分比保留几位小数 getPercentValue: function(valueList, idx, precision) { // 判断是否为空 if (!...

    js最大余额法:解决百分比和不到100%的问题

    //valueList要计算的数组
    //idx要计算数组中值的下表
    //precision百分比保留几位小数
    getPercentValue: function(valueList, idx, precision) {
        // 判断是否为空
        if (!valueList[idx]) {
            return 0;
        }
        // 求和
        let sum = valueList.reduce(function(acc, val) {
            return acc + (isNaN(val) ? 0 : val);
        }, 0);
        if (sum === 0) {
            return 0;
        }
        // 10的2次幂是100,用于计算精度。
        let digits = Math.pow(10, precision);
        // 扩大比例100,
        let votesPerQuota = valueList.map(function(val) {
            return (isNaN(val) ? 0 : val) / sum * digits * 100;
        });
        // 总数,扩大比例意味的总数要扩大
        let targetSeats = digits * 100;
        // 再向下取值,组成数组
        let seats = votesPerQuota.map(function(votes) {
            return Math.floor(votes);
        });
        // 再新计算合计,用于判断与总数量是否相同,相同则占比会100%
        let currentSum = seats.reduce(function(acc, val) {
            return acc + val;
        }, 0);
        // 余数部分的数组:原先数组减去向下取值的数组,得到余数部分的数组
        let remainder = votesPerQuota.map(function(votes, idx) {
            return votes - seats[idx];
        });
        // 给最大最大的余额加1,凑个占比100%;
        while (currentSum < targetSeats) {
            //  找到下一个最大的余额,给其加1
            let max = Number.NEGATIVE_INFINITY;
            let maxId = null;
            for (let i = 0, len = remainder.length; i < len; ++i) {
                if (remainder[i] > max) {
                    max = remainder[i];
                    maxId = i;
                }
            }
            // 对最大项余额加1
            ++seats[maxId];
            // 已经增加最大余数加1,则下次判断就可以不需要再判断这个余额数。
            remainder[maxId] = 0;
            // 总的也要加1,为了判断是否总数是否相同,跳出循环。
            ++currentSum;
        }
        // 这时候的seats就会总数占比会100%
        return seats[idx] / digits;
    }
    
    var arr= [3,4,5]
    getPercentValue(arr,0,2);//25
    getPercentValue(arr,1,2);//33.33
    getPercentValue(arr,2,2);//41.67
    
    展开全文
  • 最大余额法 参考文章最大余额法 php实现 //最大余额法 public function MaxBalance() { $data = [2,3,4]; $sum = array_sum($data); $res = []; foreach ($data as $key=>$item) { ...

    最大余额法

    参考文章最大余额法

    php实现

    /**
         * 最大余额法
         * @param array $data
         * @return array
         */
    
       function MaxBalance($data)
        {
            $sum = array_sum($data);
            $res = [];
            foreach ($data as $key=>$item) {
                $res[$key]['percent'] = ($item/$sum)*10000;
            }
            //取出小数点
            $result = [];
            foreach ($res as $key=>$value) {
    //            $tmp = explode('.', $value['percent']);
                $result[$value['percent']]['percent'] = $value['percent'];
                $tmp = explode('.', $value['percent']);
                $result[$value['percent']]['point'] = $tmp[1];
                $result[$value['percent']]['int'] = $tmp[0];
            }
            //小数点排序
            $sort = array_column($result, 'point');
            array_multisort($sort, SORT_DESC, $result);
            $int  = array_column($result,'int');
            $intSum = array_sum($int);
            $count = 10000 - $intSum;
            //余额排序分配席位
            foreach ($result as $key=>$value) {
                if($key < $count){
                    $result[$key]['int']  = ($result[$key]['int'] + 1)/100;
                } else {
                    $result[$key]['int']  = $result[$key]['int']/100;
                }
    
            }
        }
      var_dump(MaxBalance([2,3,4]));
    
    
    展开全文
  • 没办法只要去找方法,原本之前的项目是把剩余部分加到最大占比的地方,这次项目比较赶没做这方面的考虑,刚好饼图用Echarts发现他们相加刚好为100%,经过度娘,发现他们用的是最大余额法,就有了下面的方法,方法...

    项目中测试妹子报个bug:为什么饼图加起来不是100%;没办法只要去找方法,原本之前的项目是把剩余部分加到最大占比的地方,这次项目比较赶没做这方面的考虑,刚好饼图用Echarts发现他们相加刚好为100%,经过度娘,发现他们用的是最大余额法,就有了下面的方法,方法网上应该能搜到,只是加了自己的注释。感觉之后会用到,所以记录下。

       // 传入参数(数组数据,数组下标,精度),底下有例子调用
        var getPercentValue = function (valueList, idx, precision) {
            // 判断是否为空
            if (!valueList[idx]) {
                return 0;
            }
            // 求和
            var sum = valueList.reduce(function (acc, val) {
                return acc + (isNaN(val) ? 0 : val);
            }, 0)
            if (sum === 0) {
                return 0;
            }
            // 10的2次幂是100,用于计算精度。
            var digits = Math.pow(10, precision);
            // 扩大比例100,
            var votesPerQuota = valueList.map(function (val) {
                return (isNaN(val) ? 0 : val) / sum * digits * 100;
            })
            // 总数,扩大比例意味的总数要扩大
            var targetSeats = digits * 100;
            // 再向下取值,组成数组
            var seats = votesPerQuota.map(function (votes) {
                return Math.floor(votes);
            })
            // 再新计算合计,用于判断与总数量是否相同,相同则占比会100%
            var currentSum = seats.reduce(function (acc, val) {
                return acc + val;
            }, 0)
            // 余数部分的数组:原先数组减去向下取值的数组,得到余数部分的数组
            var remainder = votesPerQuota.map(function (votes, idx) {
                return votes - seats[idx];
            })
            // 给最大最大的余额加1,凑个占比100%;
            while (currentSum < targetSeats) {
                //  找到下一个最大的余额,给其加1
                var max = Number.NEGATIVE_INFINITY;
                var maxId = null;
                for (var i = 0, len = remainder.length; i < len; ++i) {
                    if (remainder[i] > max) {
                        max = remainder[i];
                        maxId = i;
                    }
                }
                // 对最大项余额加1
                ++seats[maxId];
                // 已经增加最大余数加1,则下次判断就可以不需要再判断这个余额数。
                remainder[maxId] = 0;
                // 总的也要加1,为了判断是否总数是否相同,跳出循环。
                ++currentSum;
            }
            // 这时候的seats就会总数占比会100%
            return seats[idx] / digits
        }
    

    例子:

    var arr= [3,4,5]
    document.write( getPercentValue(arr,0,2) + "<br />")
    document.write( getPercentValue(arr,1,2) + "<br />")
    document.write( getPercentValue(arr,2,2) + "<br />")
    结果
    25
    33.33
    41.67
    

    项目图
    在这里插入图片描述

    如有错误,欢迎大佬的点评。

    展开全文
  • 在做某些计算的时候,需要百分比之和是100%,但是一般求和算百分比,都会保留2位小数...就是用到了最大余额法,解决了百分比总和不是100%的问题。 最大余额法计算方法: <script> /*** 使用方法****/ let a

    在做某些计算的时候,需要百分比之和是100%,但是一般求和算百分比,都会保留2位小数(默认四舍五入),所以很多时候相加不是100%的问题。
    我们看到echarts的环形图、饼图和其他带有百分比的图表,相加之和都是100%,就是用到了最大余额法,解决了百分比总和不是100%的问题。
    最大余额法计算方法:

      <script>
          /*** 使用方法****/
            let a = 16,
                b = 18,
                c = 24,
                arr = [a, b, c];
            //获取a所占的百分比,
            let aPercentage = getPercentValue(arr, 0, 2);
            //获取b所占的百分比,
            let bPercentage = getPercentValue(arr, 1, 2);
            //获取c所占的百分比,
            let cPercentage = getPercentValue(arr, 2, 2);
            //百分比之和
            let percentageSum = aPercentage + bPercentage + cPercentage;
            console.log('get percentage', aPercentage, bPercentage, cPercentage, percentageSum);
            
            /**** 最主要部分*****/
            //最大余额法解决百分比和不是100%的问题
            function getPercentValue(arrList, index, precision) {
                //arrList要计算数据的数组
                //index要计算数组中值的下表
                //precision百分比保留几位小数,默认保留2位小数
                // 判断是否为空
                if (!arrList[index]) {
                    return 0;
                }
                 if (!precision) precision = 2;
                // 求和
                let sum = arrList.reduce(function(acc, val) {
                    return acc + (isNaN(val) ? 0 : val);
                }, 0);
                if (sum === 0) {
                    return 0;
                }
                // 10的2次幂是100,用于计算精度。
                let digits = Math.pow(10, precision);
                // 扩大比例100,
                let votesPerQuota = arrList.map(function(val) {
                    return (isNaN(val) ? 0 : val) / sum * digits * 100;
                });
                // 总数,扩大比例意味的总数要扩大
                let targetSeats = digits * 100;
                // 再向下取值,组成数组
                let seats = votesPerQuota.map(function(votes) {
                    return Math.floor(votes);
                });
                // 再新计算合计,用于判断与总数量是否相同,相同则占比会100%
                let currentSum = seats.reduce(function(acc, val) {
                    return acc + val;
                }, 0);
                // 余数部分的数组:原先数组减去向下取值的数组,得到余数部分的数组
                let remainder = votesPerQuota.map(function(votes, index) {
                    return votes - seats[index];
                });
                // 给最大最大的余额加1,凑个占比100%;
                while (currentSum < targetSeats) {
                    //  找到下一个最大的余额,给其加1
                    let max = Number.NEGATIVE_INFINITY;
                    let maxId = null;
                    for (let i = 0, len = remainder.length; i < len; ++i) {
                        if (remainder[i] > max) {
                            max = remainder[i];
                            maxId = i;
                        }
                    }
                    // 对最大项余额加1
                    ++seats[maxId];
                    // 已经增加最大余数加1,则下次判断就可以不需要再判断这个余额数。
                    remainder[maxId] = 0;
                    // 总的也要加1,为了判断是否总数是否相同,跳出循环。
                    ++currentSum;
                }
                // 这时候的seats就会总数占比会100%
                return seats[index] / digits;
            }
        </script>
    
    展开全文
  • 1.在项目的过程中我们会经常的去计算一组数中每个数占这一组数...当然最大余额法并不一定是满足你的需求的,这个地方计算百分比的时候,最好还是跟客户进行沟通确认,确认过后才能进行这么操作。客户才是最终的上帝。
  • echarts饼状图百分比是根据最大余额法来算的,源码请移步百分比算法,自己也根据源码进行了修改封装了一个方法,返回对应title百分比在legend展示即可 /** * 饼状图百分比算法--最大余额法 * @param valueList 数值...
  • 环形图将总数放置在饼图中央,且鼠标悬浮图例可以显示提示信息,图例提示信息数据计算比例采用最大余额法计算 initEchartPie() initEchartPie(){ setTimeout(()=>{ const myCharts = this.$echarts.init(this...
  • 查资料发现echarts通过最大余额算法计算占比,记录下方便使用 getPercentValue() getPercentValue(valueList, idx, precision){// 传入参数(数组数据,数组下标,精度),底下有例子调用 // 判断是否为空 if (!...
  • //对最大余额加1 ++ seats [ maxId ] ; //已经增加最大余数加1,则下次判断就可以不需要再判断这个余额数。 remainder [ maxId ] = 0 ; //总的也要加1,为了判断是否总数是否相同,跳出循环。 ++ ...
  • 记录一次线上商户余额变动异常紧急问题排查全过程问题描述一、服务器日志排查二、mysql日志排查 问题描述 今天中午14:30,解决了一个比较紧急的余额变动问题,做软件的各位同仁应该都清除,涉及到钱的问题,往往...
  • --新增余额处理。 框架为:springboot2.x,环境搭建、maven配置略。 一个简单的前端页面模拟并发量: 两个功能:一个发红包和一个抢红包 ; charset=UTF-8" pageEncoding="UTF-8"%> Title 抢红包 启动 |抢红包人数:...
  • 饼图各项相加100%

    2020-05-06 14:19:57
    //最大余额法使饼图各项相加的占比为100% getPercentValue = (valueList = [], { total, precision = 2 } = {}) => { //判空 if (!valueList.length) { return []; } //加法 求和 Decimal保证精度 const reduceFn...
  • 前端中解决百分比不等于1的问题

    千次阅读 2019-12-27 20:49:32
    这里写自定义目录标题 做项目的时候发现,计算百分比的时候有时候不能相加等于百分之百,但发现echarts的饼图不管如何都是百分之百,...Echarts最大余额法使饼图各项相加的占比为100% 在utils中新建percent.js文件 e...
  • 复习昨天的内容: 等价类划分题目: 假如有一 报表处理系统,要求用户输入处理报表的日期。假设日期的限制2000年1月2020年12月,即系统只能对该段时间内的报表进行处理。如果用户输入的时间日期...边界有效最大值:...
  • HDU 2546 饭卡余额大于等于5都可以买,给出饭卡买各种菜后使余额最小(可为负) 最优:先挑出最大的,饭卡金额减5再背包剩下的。
  • 贪心进阶

    2021-07-20 16:44:30
    贪心进阶贪心算法Huffman编码模拟退火贪心相关题目: 贪心算法 Huffman编码 模拟退火 贪心算法是指,在对问题求解时,总是以当前情况为基础作最优选择,而不考虑各种可能的整体情况,它所做出的仅仅是在某种意义上...
  • 备选流1:输入错误的密码 备选流2:输入超过余额的金额 备选流3:卡插反了 备选流4:退卡 再根据每个场景来设计测试用例。 四、判定表 1、定义 分析和表述若干输入条件下,被测对象针对这些输入做出相应反应的一种...
  • 马尔柯夫预测

    千次阅读 2014-12-23 10:25:54
     马尔柯夫预测:马尔柯夫预测以俄国数学家A.A.Markov名字命名,是利用状态之间转移概率矩阵预测事件发生的状态及其发展变化趋势,也是一种随时间序列分析。它基于马尔柯夫链,根据事件的目前状况预测其将来各个...
  • 混合测试

    千次阅读 2015-10-08 14:10:44
    通过场景操作引入变化插入数据1、增加更多数据 ...如果场景要求在一个金融机构网站上支付账单,测试人员可以选择在提交支付前查看账户余额,测试人员应该问自己:其他哪些界面和现有场景使用的界面有关”
  • (二)固定风险

    2019-11-19 22:34:26
    (二)固定风险 反马丁格尔资金管理策略 我们将学习下面几种反马丁格尔资金管理策略: 固定风险 固定资金 固定比率 固定单位数 威廉斯固定风险 固定百分比 固定波幅 这篇文章先来学习第一种管理...
  • 测试用例之场景

    千次阅读 2018-06-11 17:08:00
    测试用例之场景 场景(资料是搜集而来,不喜勿喷) 说明:场景的重点事要熟悉被测功能的需求,业务逻辑,对技术的要求反而不高 一.场景的应用场合: 业务比较复杂的软件系统都适合使用场景...
  • 测试用例设计之"场景"

    千次阅读 2012-02-26 22:15:13
    场景设计测试用例,主要用在于事件触发流程中,当某个事件触发然后就形成相应的场景流程,不同的事件触发,不同顺序和不同的处理结果,就形成一系列的 事件流结果。所以此类方法在设计测试用例时,非常形象!  ...
  • 合成控制 (Synthetic Control Method) 及 Stata实现

    万次阅读 多人点赞 2019-07-19 08:36:06
    3.3 加州控烟案例 背景:1988年11月美国加州通过了当代美国最大规模的控烟(anti-tobacco legislation),并于1989年1月开始生效。该将加州的香烟消费税(cigarette excise tax)提高了每包25美分,将所得收入...
  • 版本 0.9 债务滚雪球 此小页面将计算并显示... 债务雪球先支付最低​​余额。 这种方法给付款人最大的动力。 当每笔贷款还清时,旧的付款将转移到下一笔贷款。 最低还款额这是最糟糕的还款方式,让您与复利作斗争。
  • 等价类划分 是把程序的输入域划分成若干个子集合(等价类),然后从每个子集合(等价类)中选取少数具有代表性的数据作为测试的输入数据。 在该子集合中,所有的输入数据对于揭露软件中的错误都是等效的。-----减少...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,698
精华内容 1,879
关键字:

最大余额法