问题简述

在计算统计表格百分比的过程中,由于精度问题计算结果值总是出现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)相关推荐

  1. 计算机中求百分比的函数是什么意思,(EXCLE中阶段百分比之和的函数怎么计算?)...

    EXCEL 累加占比怎么做? 输入以下公式,然后向下填充公式 =SUM(B$2:B2)/SUM(B:B) 公式表示:将B2单元格行绝对引用,向下填充公式时,累计求和,然后除以B列总和,得到累计占比,单 ...

  2. 1. Two Sum查找列表中两数加和等于特定值Python Java

    给定一个整数数组,返回两个数字的位置,以便它们加起来成为一个特定值. 假设每个输入都只有一个解决方案,并且不会两次使用同一元素. Input: [2, 7, 11, 15],target:9 Outp ...

  3. Java案例:统计文本中所有整数之和

    一.源代码 /*** 功能:统计文件中的数字之和* 作者:华卫* 日期:2013年7月20日*/package regex;import java.io.BufferedReader; import ...

  4. GWAS分析中SNP解释百分比PVE | 第一篇,SNP解释百分比之和为何大于1?

    关于GWAS分析中PVE的计算方法: 我查了一下,大体计算PVE的方法有三种:第一种回归分析或者方差分析的方法,计算R方(GLM模型),第二种是根据effect,se,maf计算PVE,第三种是根据L ...

  5. t检验自由度的意义_在统计中自由度是什么?

    大约一年前,一位读者问我是否可以试着解释自由度在统计学中的意义.从那时起,我一直在思考因为请求非常谨慎,像某种野兽,我不确定我是否可以安全地把它打倒在地. 自由度不容易解释,他们在统计中的一些先进和复 ...

  6. 2018.11:大数据在政府统计中的应用、瓶颈及融合路径(余芳东)

    内容摘要:应用大数据是未来政府统计发展的必然趋势.本文系统梳理当前政府统计应用大数据的基本类型,研究探索大数据统计应用实践和基本方法思路,剖析大数据统计应用面临的困难和瓶颈,提出推进大数据与政府统计工 ...

  7. oracle百分比变成小数,oracle中计算百分比,并同时解决小数点前0不显示的问题...

    select a.catalog_name,decode(substr(trunc((a.s/b.count2),4)*100||'%',0,1),'.',replace(trunc((a.s/b.c ...

  8. css定位的百分比的算法,css定位中的百分比

    ----转载自自己在牛人部落中的相关文章--- 在前端css定位中经常面对的一个问题是,百分比定位究竟是针对于谁定位? 一.margin,padding的百分比 首先从css的设计意图说起,在浏览器默 ...

  9. 《Excel数据可视化:一样的数据不一样的图表》——2.3 概率统计中的正态分布和偏态分布...

    本节书摘来自华章计算机<Excel数据可视化:一样的数据不一样的图表>一书中的第2章,第2.3节,作者 恒盛杰资讯,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...

最新文章

  1. php的数据校验,php 数据类型校验函数的简单示例
  2. Zookeeper之Leader选举源码分析
  3. UI- UIView控件知识点回顾
  4. 当SAP云平台account的service Marke place里找不到Machine Learning服务该怎么办
  5. 图解算法学习笔记(四):快速排序
  6. 笔记47-徐 数据库引擎中基于行版本控制的隔离级别
  7. extjs 获取id的值_Extjs combox获取显示值和ID值
  8. html 增加和删除一行,关于JS点击增加一行,点击删除一行的问题?
  9. appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下
  10. php 如何移动文件,php怎样移动文件
  11. 麒麟案例 | 创业之路,跨境起“杭”
  12. Font Replacer
  13. 每个男人心中都有一段《西西里的美丽传说》
  14. linux ps 命令大全
  15. android webview实现拍照
  16. 大学c语言第三章作业,第三章_C语言标准课件_ppt_大学课件预览_高等教育资讯网...
  17. ISIS——LSP讲解
  18. 在计算机潮流计算的三类节点中,电力系统分析习题集.doc
  19. FZU 2238 Daxia Wzc's problem
  20. 高仿网易新闻栏目动画效果

热门文章

  1. 前端开发练习:选择题:元素的alt和title的区别?
  2. 火狐新建标签页修改及主页修改问题
  3. 关于gitlab拉代码和传代码
  4. 如何强制卸载老版本Vue-cli
  5. ros下Kinect的“跟屁虫”
  6. 华为服务器如何备份系统,服务器怎么备份操作系统
  7. 在APP中的那些图片上传是如何做的?PictureSelector—一个强大的图片选择器。相机和相册选择分开
  8. CAD如何标注文字?说一个快速标注途径
  9. 摄影师选图脚本(根据快照文件的存在与否整理原文件)
  10. Cube.js 试试这个新的数据分析开源工具