//valueList 总数组
//index 需要被计算的数组的下标
//precision 几位小数
getPercentValue: function(valueList, index, precision) {// 判断是否为空if (!valueList[index]) {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, index) {return votes - seats[index];});// 给最大最大的余额加1,凑个占比100%;while (currentSum < targetSeats) {//  找到下一个最大的余额,给其加1let 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;
}var arr= [3,4,5]
getPercentValue(arr,0,2);//25
getPercentValue(arr,1,2);//33.33
getPercentValue(arr,2,2);//41.67

Echarts 扇形百分比算法(最大余额法)相关推荐

  1. 饼状图百分比算法--最大余额法

    前段时间测试提了一个bug,我打开一开,好家伙!原来是echarts饼状图数据展示百分比有一个与legend百分比的展示不一样.拿起手机一算果然,饼状图加在一起刚好100%,而legend加在一起是9 ...

  2. Echarts饼图百分比算法利用Java实现

    问题:在开发中有这样的问题,就是需要在其他地方展示百分比,但是自己计算的百分比通过四舍五入后,与饼图里面的百分比不一致的问题,要想解决这个问题,那么必须要使用echarts源码中的计算方式.当存在四舍 ...

  3. java最大余数法(百分比算法Echarts)

    最近工作中使用Echarts开发报表的时候遇到了这样的一个问题,需求是一个div中左边是一个环形图表,右边是一个表格,表格中展示图表中每个类别占用的百分比. 存在的问题: 1.当存在四舍五入的时候,E ...

  4. JAVA计算饼图百分比合计不是100的问题处理,最大余额法

    背景: 由于各种原因需要后端来计算每个项所占的百分比,但是会发现计算的各项百分比合计不绝对是100,不能简单的对各项使用四舍五入法,舍九法,进一法等. 思路: 使用最大余额法(比例代表制投票制度下,一 ...

  5. java 余额_java模拟实现 最大余额法

    java初步实现最大余额法,自己使用过程中没发现问题(有没有其它bug,还有待验证) 阅读之前请先查看前一篇 <百度echarts饼图百分比的计算规则---最大余额法>,保证理解了什么是最 ...

  6. 【智能车】图像二值化算法--大津法OTSU

    图像二值化算法–大津法OTSU 大津算法是一种图像二值化算法,作用是确定将图像分成黑白两个部分的阈值. 大津法是针对灰度值进行阈值分割二值化,如果是彩色图像的话需要先转化成灰度图再进行计算. 方差越大 ...

  7. 算法最少分组法_数据结构

    20210328 https://blog.csdn.net/sinat_41144773/article/details/89530403 树.二叉树(完全二叉树.满二叉树)概念图解 二叉树:每个结 ...

  8. java 二分查找_计算机入门必备算法——二分查找法

    1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...

  9. 五大经典算法之回溯法

    一.基本概念   回溯法,又称为试探法,按选优条件向前不断搜索,以达到目标.但是当探索到某一步时,如果发现原先选择并不优或达不到目标,就会退回一步重新选择,这种达不到目的就退回再走的算法称为回溯法. ...

最新文章

  1. java ide 进行图形化界面时不能显示汉字_主流开源IDE汇总,Java程序员一定能用上!...
  2. IE7下元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
  3. 数字化专业人才短缺,企业亟待组建培养体系
  4. Rust 1.34.1 稳定版发布,Bug 修复
  5. .net core 获取机器码_.NET Core 反射获取所有控制器及方法上特定标签
  6. Kubernetes1.4即将发布
  7. 从零开始搭建“表情包小程序”
  8. 低压差线性稳压器MPQ2013A-AEC1品牌MPS国产替代
  9. kindle刷机ttl_“免费” PHICOMM 斐讯 K2路由器TTL刷机全纪录
  10. python实现飞机大战源代码+素材+项目分析
  11. Python-进制转换
  12. mysql migration toolkit 使用_MySQL Migration Toolkit的使用
  13. ArcGIS Server 发布服务失败
  14. 微火发布数据中台产品,加速商户数字化转型经营
  15. 10种网站推广的常用方法
  16. 企业微信版本更新(4.0.0.6003)
  17. 需求的获取:需求调研中的5W+1H定律
  18. H3C网络搭建入门(H3C、Oracle、CRT三种软件的关联,以便于模拟实际)
  19. RocketMQ过滤器demo实现--李波RocketMQ学习
  20. Camtasia 2022最新免费版更新新增功能测评

热门文章

  1. 陆琪:为什么说爱情中“莫欺少年穷”?《秒懂男人》书摘
  2. 优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybrid App源码
  3. 烟台大学计算机学院考研成果,2020年烟台大学计算机科学与技术考研经验分享...
  4. 浅析一对一直播的发展趋势
  5. 京东商城注册页面使用的正则表达式
  6. S2-使用java实现面向编程_第一章上机
  7. Unity UMP插件编辑里运行正常,打包出来后报cant load “libvlccore“ library
  8. Osprey后浪登场,灰度内忧外患如何接招?
  9. 关于车牌识别系统的一些常见问题及解决方法
  10. uniapp 小程序uni.getLocation()不能返回中文地理位置