关于统计中的百分比之和不等于100的问题(Java)
问题简述
在计算统计表格百分比的过程中,由于精度问题计算结果值总是出现99.97%或是100.1%不等于100%的情况,最初的方案一般都是通过最后一个值等于1 减去百分比来完成计算,但这种方式存在弊端。经常出现异常数据,经过在查找有以下方法。
@Testpublic void test1(){int[] arr = new int[]{3,3,3};for(int i = 0;i < arr.length; i++){System.out.println("值:"+getPercentValue(arr,9,i,2));}}/*** 数组* @param arr 数组* @param sum 总数* @param idx 索引* @param precision 精度* @return*/public static double getPercentValue(int[] arr,double sum,int idx,int precision){if((arr.length-1) < idx){return 0;}//求和if(sum <= 0){for (int i = 0; i < arr.length; i++) {sum += arr[i];}}//10的2次幂是100,用于计算精度。double digits = Math.pow(10,precision);//扩大比例100double[] votesPerQuota = new double[arr.length];for(int i = 0; i < arr.length; i++){double val = arr[i] / sum * digits * 100;votesPerQuota[i] = val;}//总数,扩大比例意味的总数要扩大double targetSeats = digits * 100;//再向下取值,组成数组double[] seats = new double[arr.length];for(int i = 0; i < votesPerQuota.length; i++){seats[i] = Math.floor(votesPerQuota[i]);}//再新计算合计,用于判断与总数量是否相同,相同则占比会100%double currentSum = 0;for (int i = 0; i < seats.length; i++) {currentSum += seats[i];}//余数部分的数组:原先数组减去向下取值的数组,得到余数部分的数组double[] remainder = new double[arr.length];for(int i = 0; i < seats.length; i++){remainder[i] = votesPerQuota[i] - seats[i];}while(currentSum < targetSeats){double max = 0;int maxId = 0;int len = 0;for(int 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[idx] / digits;}
计算结果
值:33.34
值:33.33
值:33.33
关于统计中的百分比之和不等于100的问题(Java)相关推荐
- 计算机中求百分比的函数是什么意思,(EXCLE中阶段百分比之和的函数怎么计算?)...
EXCEL 累加占比怎么做? 输入以下公式,然后向下填充公式 =SUM(B$2:B2)/SUM(B:B) 公式表示:将B2单元格行绝对引用,向下填充公式时,累计求和,然后除以B列总和,得到累计占比,单 ...
- 1. Two Sum查找列表中两数加和等于特定值Python Java
给定一个整数数组,返回两个数字的位置,以便它们加起来成为一个特定值. 假设每个输入都只有一个解决方案,并且不会两次使用同一元素. Input: [2, 7, 11, 15],target:9 Outp ...
- Java案例:统计文本中所有整数之和
一.源代码 /*** 功能:统计文件中的数字之和* 作者:华卫* 日期:2013年7月20日*/package regex;import java.io.BufferedReader; import ...
- GWAS分析中SNP解释百分比PVE | 第一篇,SNP解释百分比之和为何大于1?
关于GWAS分析中PVE的计算方法: 我查了一下,大体计算PVE的方法有三种:第一种回归分析或者方差分析的方法,计算R方(GLM模型),第二种是根据effect,se,maf计算PVE,第三种是根据L ...
- t检验自由度的意义_在统计中自由度是什么?
大约一年前,一位读者问我是否可以试着解释自由度在统计学中的意义.从那时起,我一直在思考因为请求非常谨慎,像某种野兽,我不确定我是否可以安全地把它打倒在地. 自由度不容易解释,他们在统计中的一些先进和复 ...
- 2018.11:大数据在政府统计中的应用、瓶颈及融合路径(余芳东)
内容摘要:应用大数据是未来政府统计发展的必然趋势.本文系统梳理当前政府统计应用大数据的基本类型,研究探索大数据统计应用实践和基本方法思路,剖析大数据统计应用面临的困难和瓶颈,提出推进大数据与政府统计工 ...
- oracle百分比变成小数,oracle中计算百分比,并同时解决小数点前0不显示的问题...
select a.catalog_name,decode(substr(trunc((a.s/b.count2),4)*100||'%',0,1),'.',replace(trunc((a.s/b.c ...
- css定位的百分比的算法,css定位中的百分比
----转载自自己在牛人部落中的相关文章--- 在前端css定位中经常面对的一个问题是,百分比定位究竟是针对于谁定位? 一.margin,padding的百分比 首先从css的设计意图说起,在浏览器默 ...
- 《Excel数据可视化:一样的数据不一样的图表》——2.3 概率统计中的正态分布和偏态分布...
本节书摘来自华章计算机<Excel数据可视化:一样的数据不一样的图表>一书中的第2章,第2.3节,作者 恒盛杰资讯,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...
最新文章
- php的数据校验,php 数据类型校验函数的简单示例
- Zookeeper之Leader选举源码分析
- UI- UIView控件知识点回顾
- 当SAP云平台account的service Marke place里找不到Machine Learning服务该怎么办
- 图解算法学习笔记(四):快速排序
- 笔记47-徐 数据库引擎中基于行版本控制的隔离级别
- extjs 获取id的值_Extjs combox获取显示值和ID值
- html 增加和删除一行,关于JS点击增加一行,点击删除一行的问题?
- appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下
- php 如何移动文件,php怎样移动文件
- 麒麟案例 | 创业之路,跨境起“杭”
- Font Replacer
- 每个男人心中都有一段《西西里的美丽传说》
- linux ps 命令大全
- android webview实现拍照
- 大学c语言第三章作业,第三章_C语言标准课件_ppt_大学课件预览_高等教育资讯网...
- ISIS——LSP讲解
- 在计算机潮流计算的三类节点中,电力系统分析习题集.doc
- FZU 2238	Daxia Wzc's problem
- 高仿网易新闻栏目动画效果