目录
double统计的数据范围过大需要再次转换String格式:
前言:
记录小笔记
list 对象统计近一年的金额
List<对象> dtoList=null;
LocalDate oneYearAgo = LocalDate.now().minusYears(1); // 计算1年前的日期
double oneYearAmount = 0;
for (xxx obj : dtoList) {
LocalDate executeDate = stringToDate(obj.getFilingDate()).toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); // 转换为 LocalDate 类型
if (executeDate.isAfter(oneYearAgo)) { // 筛选出最近1年的数据
oneYearAmount += Double.parseDouble(obj.getAmount());
}
}
LocalDate.now().minusYears(1) 计算的是当前时间的前一年的日期。例如,今天是2021年9月1日,那么 LocalDate.now().minusYears(1) 就是2020年9月1日。
统计列表累计金额
//统计数据里的所有累计金额
double sum = dtoList.stream()
.mapToDouble(obj -> Double.parseDouble(obj.getAmount()))
.sum();
获取近一年或者当前一年日期
可以使用 LocalDate
类中的 withDayOfYear()
方法来表示当前一年的时间
LocalDate now = LocalDate.now();
LocalDate startOfYear = now.withDayOfYear(1);
LocalDate endOfYear = now.withDayOfYear(now.lengthOfYear());
列子:
LocalDate now = LocalDate.parse("2023-05-18");
LocalDate startOfYear = now.withDayOfYear(1);
LocalDate endOfYear = now.withDayOfYear(now.lengthOfYear());
这段代码计算的是2023年的时间跨度,从2023年1月1日开始,到12月31日结束。
这段代码实际上是计算当前的一年时间,也就是从当前年份的第一天到最后一天的时间段。其中,LocalDate.now()
获取当前日期,now.withDayOfYear(1)
获取了当前年份的第一天日期,now.withDayOfYear(now.lengthOfYear())
获取了当前年份的最后一天日期。两者之差即为当前一年的时间跨度。
double统计的数据范围过大需要再次转换String格式:
private static String compareToString(double amount) {
DecimalFormat decimalFormat = new DecimalFormat("#.00");
String sumFormatted = decimalFormat.format(amount);
return sumFormatted;
}
这个格式是科学计数法表示的结果。科学计数法是一种表示大数字或小数字的方法,可以简化数字的表示,但不太方便人类阅读。在Java中,当一个数字太大或者太小,超过了double类型的范围时,就会使用科学计数法来表示。1.2924299E7表示1.2924299乘以10的7次方,即12924299。因此在将这个数字转换为字符串时,可能需要使用DecimalFormat等工具来进行格式化,以便更好地呈现给人类阅读。