java计算值所占的百分比
输入一个整数数组a,输出一个同样长度的数组b表示对应a数组各个位置上的元素值占a数组总值的百分比。
public static double[] getPercentValue(int[] arr){
//求和
double sum = 0;
if(sum <= 0){
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
}
//10的2次幂是100,用于计算精度。
double digits = 1;
//扩大比例100
double[] 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;
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;
}
例:
public static void main(String[] args) {
int arr[] = new int[]{1,4,3};
final double[] percentValue = getPercentValue(arr);
for (double v : percentValue) {
System.out.println(new Double(v).intValue());
}
}
输出:
13
50
37
评论区
请写下您的评论...
猜你喜欢
blog
javascript 计算值所占的百分比
前端
1134
js计算值所占的百分比:functiongetPercentValue(arr){//求和letsum=0;if(sum=0){for(leti=0;iarr.length;i++){sum
blog
java计算百分比的方法
工具
5330
publicstaticvoidmain(String[]args){ inta=3;intb=9;NumberFormatnumberFormat=NumberFormat.getInstance();numberFormat.setMaximumFractionDigits(2);Stringresult=numberFormat.format((float)a/(float)b*100);S
blog
java使用欧几里得算法计算比例的方法
数据结构与算法
1720
java使用欧几里得算法计算比例的方法 publicstaticvoidmain(String[]args){ System.out.println(bili(2,6
ofc
计算机网络的性能指标
official
928
交互一次所需的时间。
七、利用率 利用率有值道迎圣利驻迎圣两种。信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)完点空闲的信道的利用率是零。网络利用率则是全网络的信道而用率的加权平均值
ofc
计算机系统的层次结构
official
1552
《计算机组成原理》计算机系统的层次结构计算机系统层次结构的概念,目前比较一致的计算机系统的层次结构如下图,其中左边是层次结构中各层次的名字,右边是对应于不同层的某种编程语言表现形式。计算机系统的层次
ofc
计算机网络数据通讯的基础知识
official
862
包括以下两个部分:
源点(source)源点设备产生要传输的数据,例如,从计算机的键盘输入汉字,计算机产生输出的数字比特流。源点又称为源站,或信源。
发送器通常源点生成的数字比特流要通过发送器编码后
ofc
计算机网络的性能指标
official
734
[TOC]一、速率 我们知道,计算机发送出的信号都是数字形式的。比特(bit)来源于binarydigit,意思是一个“二进制数字”,因此一个比特就是二进制数字中的一个1或0。比特也是信息论中使用
ofc
计算机网络-信道复用技术
official
1303
分配时隙,而是按需动态地分配时隙。因此统计时分复用可以提高线路的利用率。我们还可看出,在输出线路上,某一个用户所占用的时隙并不是周期性地出现。因此统计复用又称为异步时分复用,而普通的时分复用称为同步时
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。