思想:

1. 所有的百分比取整数部分

2. 将所有百分比相加,最理想状态是100%,但相信大部分是小于100%的,取差值

3. 数组按小数部分排序

4. 从小数最大的那个百分比开始加一,直到补全所有的差值

下面这个图说的很清楚了,图是我从百度过来的

实现:

我把它封装成了方法

/***  ary 要处理的数据的数组集合 **  field 要求百分比的字段**  total 总数
*/
vm.formatRatio = function (ary, field, total) {if (!Array.isArray(ary)) {return;}var sum = 0;//思想 向下取整,然后按余数的大小排序,和100的差值从上到下加1,直到差值补上ary.forEach(function (item) {//整数部分item.formatRatio = parseInt(_.get(item, field) * 100 / total);item.formatInt = parseInt(_.get(item, field) * 100 / total);sum += item.formatInt;//小数部分item.formatDot = _.get(item, field) * 100 / total - item.formatInt;})var diff = 100 - sum;if (diff) {//按余数排序ary = _.sortBy(ary, ['formatDot']);for (var i = ary.length - 1; i >= 0; i--) {if (diff == 0) continue;++ary[i].formatRatio;--diff;}}//处理0%的数据,不显示0%,显示小于1%ary.forEach(function (item) {if (item.formatRatio == 0) {item.formatRatio = '小于 1'}})//从大到小排序ary = _.sortBy(ary, ['formatRatio']).reverse();return ary}

有写的不清楚的地方可以留言问我,感谢图中网友给的思路

如何解决算百分比,加起来不是100%的问题相关推荐

  1. 统计图表-BigDecimal-换算百分比-加一起不满足100%

    // 总数 BigDecimal bigDecimalSum = new BigDecimal(); // 设置一个总值 1 BigDecimal one = BigDecimal.ONE;//循环数 ...

  2. 【Vue】—解决页面图片加载抖动的问题

    [Vue]-解决页面图片加载抖动的问题 问题如下 解决办法 overflow:hidden; height:0; padding-bottom:*; // 其中*处填 图片的高宽百分比=高/宽*100 ...

  3. 解决国内GitHub加载慢的问题

    解决国内GitHub加载慢的问题 参考文章: (1)解决国内GitHub加载慢的问题 (2)https://www.cnblogs.com/ltfxy/p/9998602.html (3)https: ...

  4. 成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。

    成功解决(Win32): 已加载"C:\Windows\SysWOW64\ntdll.dll".无法查找或打开 PDB 文件. 目录 解决问题 解决方法 解决问题 解决方法 工具栏 ...

  5. php自定义函数数学计算,ThinkPHP自定义函数解决模板标签加减运算的方法

    本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运 ...

  6. python加载模型_解决python 无法加载downsample模型的问题

    downsample 在最新版本里面修改了位置 from theano.tensor.single import downsample (旧版本) 上面以上的的import会有error raise: ...

  7. border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题

    border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题 参考文章: (1)border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题 (2)http ...

  8. 解决AssetBundle包加载预制体时,Shader显示异常的问题

    解决AssetBundle包加载预制体时,Shader显示异常的问题 参考文章: (1)解决AssetBundle包加载预制体时,Shader显示异常的问题 (2)https://www.cnblog ...

  9. vs2012 怎样解决 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包的问题

    vs2012 怎样解决 未能正确加载"Microsoft.VisualStudio.Editor.Implementation.EditorPackage"包的问题 参考文章: ( ...

最新文章

  1. (转)AS3函数动态添加实例属性
  2. 听说有人解决了三体问题,我去做了一点微小的调查
  3. mathematica实现闭包
  4. 在StackBlitz上setup SAP Spartacus
  5. Axure原型制作规范
  6. 计算机网络---ICMP、IGMP协议
  7. MATLAB高斯迭代算法,基于MATLAB实现高斯赛德尔迭代潮流计算.pdf
  8. matlab剪切板中内容清除,清除剪贴板的内容
  9. unity android录制视频教程,Unity3d 录屏功能教程指南 | Cross Platform Replay Kit
  10. paperJS中使用lab,lch等颜色
  11. python基本类型关键字_python中的关键字---1(基础数据类)
  12. 使用自定义的dns服务器,快速搭建自己的DNS服务器
  13. css 实现弹框滚动条
  14. 现货、期货、期权、权证
  15. Webstorm添加新建文件类型 创建文件模板
  16. JavaWeb项目实现163邮箱验证码
  17. word2007中编辑页眉,那个横线怎么去掉?
  18. Xbox One手柄
  19. win10从零安装配置pytorch全过程
  20. HTML中的表格和表单

热门文章

  1. Excel PivotTable 使用心得手顺分享(一)
  2. QQ的群消息关键字屏蔽
  3. 黄河流域公安院校网络空间安全技能挑战赛 QAQ 题解
  4. 机器学习--详解人脸对齐算法SDM-LBF
  5. 汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL
  6. 10种方法打开EPUB文件
  7. python程序员收入-令人羡慕!33岁程序员晒出收入和待遇,网友望尘莫及
  8. 外国优秀网页html,200个优秀的国外设计网站推荐
  9. c语言 一个数组奇数左边 偶数右边,C语言设计实验报告(第七次)
  10. 想知道添加水印的软件哪个好?这2款软件简单又实用