当前位置:网站首页>计算饼状图百分比
计算饼状图百分比
2022-04-23 16:40:00 【轻松的小希】
需求描述:
给定一个整数数组,例如:[2, 3, 4],计算各个元素的百分比,要求百分比累加为100%。
input = [2, 3, 4]
output = [22.22, 33.33, 44.45]
项目依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
代码实现:
public class PercentUtils {
/** * 计算饼状图百分比 * * @param arr * @param idx * @param precision * @return */
public static double getPercentValue(int[] arr, int idx, int precision) {
//判断索引
if (idx < 0 || (arr.length - 1) < idx) {
return 0;
}
//数组求和
double sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
if (sum <= 0) {
return 0;
}
//计算精度
double digits = Math.pow(10, precision);
//扩大比例
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]);
}
//重新累加
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 = Double.MIN_VALUE;
int maxId = 0;
for (int i = 0; i < remainder.length; ++i) {
if (remainder[i] > max) {
max = remainder[i];
maxId = i;
}
}
//对最大项余额加一
++seats[maxId];
//这个余数已经使用
remainder[maxId] = 0;
//总数也要相应加一
++currentSum;
}
//返回占比
return seats[idx] / digits;
}
}
运行效果:
@SpringBootTest
public class TestPercentUtils {
@Test
public void testGetPercentValue01() {
int[] arr = new int[]{
2, 3, 4};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i] + " percent = " + PercentUtils.getPercentValue(arr, i, 2));
}
}
@Test
public void testGetPercentValue02() {
int[] arr = new int[]{
2, 2, 2};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i] + " percent = " + PercentUtils.getPercentValue(arr, i, 2));
}
}
}
2 percent = 22.22
3 percent = 33.33
4 percent = 44.45
2 percent = 33.34
2 percent = 33.33
2 percent = 33.33
版权声明
本文为[轻松的小希]所创,转载请带上原文链接,感谢
https://caochenlei.blog.csdn.net/article/details/124319584
边栏推荐
- MySQL master-slave replication
- Ali developed three sides, and the interviewer's set of combined punches made me confused on the spot
- The most detailed knapsack problem!!!
- Gartner publie une étude sur les nouvelles technologies: un aperçu du métacosme
- Dlib of face recognition framework
- NVIDIA graphics card driver error
- What is homebrew? And use
- Flask如何在内存中缓存数据?
- The font of the soft cell changes color
- Execution plan calculation for different time types
猜你喜欢
Knowledge points and examples of [seven input / output systems]
English | day15, 16 x sentence true research daily sentence (clause disconnection, modification)
Use itextpdf to intercept the page to page of PDF document and divide it into pieces
RAID磁盘阵列与RAID5的创建
Download and install mongodb
Hyperbdr cloud disaster recovery v3 Version 2.1 release supports more cloud platforms and adds monitoring and alarm functions
如何建立 TikTok用户信任并拉动粉丝增长
Set cell filling and ranking method according to the size of the value in the soft report
Force buckle - 198 raid homes and plunder houses
Hypermotion cloud migration helped China Unicom. Qingyun completed the cloud project of a central enterprise and accelerated the cloud process of the group's core business system
随机推荐
ESXi封装网卡驱动
G008-hwy-cc-estor-04 Huawei Dorado V6 storage simulator configuration
Ali developed three sides, and the interviewer's set of combined punches made me confused on the spot
The most detailed Backpack issues!!!
聊一聊浏览器缓存控制
Oracle data pump usage
Solution of garbled code on idea console
How magical is the unsafe class used by all major frameworks?
The first line and the last two lines are frozen when paging
What is homebrew? And use
Sail soft implements a radio button, which can uniformly set the selection status of other radio buttons
Install MySQL on MAC
LVM与磁盘配额
阿里研发三面,面试官一套组合拳让我当场懵逼
New project of OMNeT learning
Selenium IDE and XPath installation of chrome plug-in
[pyGame games] how did angry birds, a mobile game that became popular all over the world 10 years ago, dominate the list? Classic return
MySQL master-slave replication
七朋元视界可信元宇宙社交体系满足多元化的消费以及社交需求
人脸识别框架之dlib