java求同比环比代码
时间: 2023-05-17 08:04:30 浏览: 129
以下是 Java 求同比环比的代码示例:
```java
public class Main {
public static void main(String[] args) {
int[] data = {10, 20, 30, 40, 50};
int n = data.length;
// 求同比
double tb = (data[n - 1] - data[n - 2]) / (double)data[n - 2] * 100;
System.out.println("同比增长率为:" + tb + "%");
// 求环比
double hb = (data[n - 1] - data[n - 2]) / (double)data[n - 1] * 100;
System.out.println("环比增长率为:" + hb + "%");
}
}
```
希望能够帮到你!
相关问题
java写一段求环比同比的代码
环比和同比是比较两个时间段的数据,因此需要获取两个时间段的数据并进行计算。以下是Java中求环比和同比的代码示例:
```java
import java.math.BigDecimal;
public class CompareUtil {
/**
* 环比增长率 = (本期数-上期数) / 上期数 × 100%
* @param currentNum 本期数
* @param lastNum 上期数
* @return 环比增长率
*/
public static double getMoM(BigDecimal currentNum, BigDecimal lastNum) {
BigDecimal diff = currentNum.subtract(lastNum);
return diff.divide(lastNum, 4, BigDecimal.ROUND_HALF_UP).doubleValue() * 100;
}
/**
* 同比增长率 = (本期数-去年同期数) / 去年同期数 × 100%
* @param currentNum 本期数
* @param sameTimeLastYearNum 去年同期数
* @return 同比增长率
*/
public static double getYoY(BigDecimal currentNum, BigDecimal sameTimeLastYearNum) {
BigDecimal diff = currentNum.subtract(sameTimeLastYearNum);
return diff.divide(sameTimeLastYearNum, 4, BigDecimal.ROUND_HALF_UP).doubleValue() * 100;
}
}
```
示例代码中使用BigDecimal类来处理数值计算,以避免精度问题。使用时,只需要传入相应的本期数和上期数、去年同期数即可计算出环比增长率和同比增长率。
java根据日月年维度,计算出环比同比的工具类
可以使用Java中的Joda-Time库来计算环比和同比,具体步骤如下:
1. 读取数据并转换成List格式
2. 对List进行处理,例如按照日期进行排序
3. 计算环比和同比,可以使用Joda-Time库中的DateTime和Period类来实现,例如环比可以使用以下公式:(当前月份的数据 - 上一个月份的数据) / 上一个月份的数据,同理可以计算同比
4. 输出结果
以下是一个简单的示例代码:
```java
import org.joda.time.DateTime;
import org.joda.time.Period;
import java.util.List;
public class RatioUtils {
public static void calculate(List<Data> dataList) {
// 按照日期排序
dataList.sort((o1, o2) -> o1.getDate().compareTo(o2.getDate()));
for (int i = 0; i < dataList.size(); i++) {
Data data = dataList.get(i);
DateTime dateTime = new DateTime(data.getDate());
// 计算环比
if (i > 0) {
Data prevData = dataList.get(i - 1);
Period period = new Period(prevData.getDate().getTime(), data.getDate().getTime());
int months = period.getMonths() + period.getYears() * 12;
double monthOnMonth = (data.getValue() - prevData.getValue()) / prevData.getValue();
System.out.println(dateTime.toString("yyyy-MM-dd") + "环比增长率:" + monthOnMonth);
}
// 计算同比
if (i > 11) {
Data prevYearData = dataList.get(i - 12);
double yearOnYear = (data.getValue() - prevYearData.getValue()) / prevYearData.getValue();
System.out.println(dateTime.toString("yyyy-MM-dd") + "同比增长率:" + yearOnYear);
}
}
}
}
class Data {
private Date date;
private double value;
public Data(Date date, double value) {
this.date = date;
this.value = value;
}
public Date getDate() {
return date;
}
public double getValue() {
return value;
}
}
```
其中,Data类封装了日期和对应数值,可以根据实际情况进行修改。
阅读全文