如何解决算百分比,加起来不是100%的问题
思想:
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%的问题相关推荐
- 统计图表-BigDecimal-换算百分比-加一起不满足100%
// 总数 BigDecimal bigDecimalSum = new BigDecimal(); // 设置一个总值 1 BigDecimal one = BigDecimal.ONE;//循环数 ...
- 【Vue】—解决页面图片加载抖动的问题
[Vue]-解决页面图片加载抖动的问题 问题如下 解决办法 overflow:hidden; height:0; padding-bottom:*; // 其中*处填 图片的高宽百分比=高/宽*100 ...
- 解决国内GitHub加载慢的问题
解决国内GitHub加载慢的问题 参考文章: (1)解决国内GitHub加载慢的问题 (2)https://www.cnblogs.com/ltfxy/p/9998602.html (3)https: ...
- 成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
成功解决(Win32): 已加载"C:\Windows\SysWOW64\ntdll.dll".无法查找或打开 PDB 文件. 目录 解决问题 解决方法 解决问题 解决方法 工具栏 ...
- php自定义函数数学计算,ThinkPHP自定义函数解决模板标签加减运算的方法
本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运 ...
- python加载模型_解决python 无法加载downsample模型的问题
downsample 在最新版本里面修改了位置 from theano.tensor.single import downsample (旧版本) 上面以上的的import会有error raise: ...
- border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题
border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题 参考文章: (1)border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题 (2)http ...
- 解决AssetBundle包加载预制体时,Shader显示异常的问题
解决AssetBundle包加载预制体时,Shader显示异常的问题 参考文章: (1)解决AssetBundle包加载预制体时,Shader显示异常的问题 (2)https://www.cnblog ...
- vs2012 怎样解决 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包的问题
vs2012 怎样解决 未能正确加载"Microsoft.VisualStudio.Editor.Implementation.EditorPackage"包的问题 参考文章: ( ...
最新文章
- (转)AS3函数动态添加实例属性
- 听说有人解决了三体问题,我去做了一点微小的调查
- mathematica实现闭包
- 在StackBlitz上setup SAP Spartacus
- Axure原型制作规范
- 计算机网络---ICMP、IGMP协议
- MATLAB高斯迭代算法,基于MATLAB实现高斯赛德尔迭代潮流计算.pdf
- matlab剪切板中内容清除,清除剪贴板的内容
- unity android录制视频教程,Unity3d 录屏功能教程指南 | Cross Platform Replay Kit
- paperJS中使用lab,lch等颜色
- python基本类型关键字_python中的关键字---1(基础数据类)
- 使用自定义的dns服务器,快速搭建自己的DNS服务器
- css 实现弹框滚动条
- 现货、期货、期权、权证
- Webstorm添加新建文件类型 创建文件模板
- JavaWeb项目实现163邮箱验证码
- word2007中编辑页眉,那个横线怎么去掉?
- Xbox One手柄
- win10从零安装配置pytorch全过程
- HTML中的表格和表单