BigDecimal计算

加法  a.add(b);

减法 a.subtract(b);

乘法 a.multiply(b);

除法 a.divide(b,需要精确到小数点以后几位,BigDecimal.ROUND_HALF_UP)

//* 保留位数、四舍五入

//1.直接去掉多余的位数 ROUND_DOWN
BigDecimal a = new BigDecimal("1.234").setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(a);//1.23

//2.去掉多余的位数并进位 ROUND_UP
BigDecimal b = new BigDecimal("1.234").setScale(2, BigDecimal.ROUND_UP);
System.out.println(b);//1.24

//3.正数进位,负数舍位 ROUND_CEILING
BigDecimal c = new BigDecimal("1.234").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(c);//1.24 如果是正数,相当于BigDecimal.ROUND_UP
 
BigDecimal d = new BigDecimal("-1.234").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(d);//-1.23 如果是负数,相当于BigDecimal.ROUND_DOWN

//4.正数舍位,负数进位 ROUND_FLOOR
BigDecimal e = new BigDecimal("1.234").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(e);//1.23 如果是正数,相当于BigDecimal.ROUND_DOWN
 
BigDecimal f = new BigDecimal("-1.234").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(f);//-1.24 如果是负数,相当于BigDecimal.ROUND_HALF_UP

//5.四舍五入 (若舍弃部分>=.5,就进位)ROUND_HALF_UP
BigDecimal g = new BigDecimal("1.225").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(g); //1.23 

//6.四舍五入(若舍弃部分>.5,就进位)ROUND_HALF_DOWN
BigDecimal h = new BigDecimal("1.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println(h);//1.22 

//7.ROUND_HALF_EVEN
BigDecimal i = new BigDecimal("1.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(i);//1.22 如果舍弃部分左边的数字为偶数,则作 ROUND_HALF_DOWN
 
BigDecimal j = new BigDecimal("1.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(j);//1.22 如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP

SwitchItem

/**
 * 根据下划线字段转驼峰字段
 * 
 * @param item 下划线字段
 * @return 驼峰字段
 */
private String SwitchHump(String item) {
   while (true) {
      if (item.contains("_")) {
         int index = item.indexOf("_");
         String value = item.substring(index + 1, index + 2);
         value = value.toUpperCase();
         item = item.replace(item.substring(index, index + 2), value);
      } else {
         break;
      }
   }
   return item;
}

/**
 * 将驼峰转为下划线
 * 
 * @param item 驼峰字段
 * @return 下划线字段
 */
public String SwitchUnderline(String item) {
   String num = "0123456789";
   String result = "";
   for (int index = 0; index < item.length(); index++) {
      String value = item.substring(index, index + 1);
      if (num.contains(value)) {
         value = "_" + value;
      } else if (Character.isUpperCase(value.charAt(0))) {
         value = "_" + value.toLowerCase();
      }
      result += value;
   }
   return result;
}

Switch

/**
 * 将String转换为数组
 * 
 * @param value 数组格式String字符串
 * @return 数组
 */
public static String[] switchTo(String value) {
   return value.replace("[", "").replace("]", "").replaceAll(" ", "").split(",");
}

/**
 * 遍历数组返回字符串
 * 
 * @param values 数组
 * @return 拼接的字符串
 */
public static String switchToString(String[] values) {
   String result = "";
   if (Util.notEmpty(values)) {
      for (String value : values) {
         result += ",'" + value + "'";
      }
      result = result.replaceFirst(",", "");
   }
   return result;
}

/**
 * 将String集合转化为BigDecimal集合
 * 
 * @param values String集合
 * @return BigDecimal集合
 */
public static List<BigDecimal> switchTo(String[] values) {
   List<BigDecimal> result = new ArrayList<>();
   for (String value : values) {
      if (Util.notEmpty(value)) {
         BigDecimal bigDecimal = new BigDecimal(value);
         result.add(bigDecimal);
      } else {
         result.add(null);
      }
   }
   return result;
}

/**
 * 根据BigDecimal集合获取最大值
 * 
 * @param list BigDecimal集合
 * @return 最大值
 */
public static BigDecimal getMax(List<BigDecimal> list) {
   BigDecimal max = list.get(0);
   for (BigDecimal value : list) {
      if (value.subtract(max).doubleValue() > 0) {
         max = value;
      }
   }
   return max;
}

/**
 * 根据BigDecimal集合获取最小值
 * 
 * @param list BigDecimal集合
 * @return 最小值
 */
public static BigDecimal getMin(List<BigDecimal> list) {
   BigDecimal min = list.get(0);
   for (BigDecimal value : list) {
      if (value.subtract(min).doubleValue() < 0) {
         min = value;
      }
   }
   return min;
}

/**
 * 根据BigDecimal集合获取和 只计算正值
 * 
 * @param list BigDecimal集合
 * @return 集合的和
 */
public static BigDecimal getSum(List<BigDecimal> list) {
   BigDecimal sum = new BigDecimal(0);
   for (BigDecimal value : list) {
      if (value.doubleValue() > 0) {
         sum = sum.add(value);
      }
   }
   return sum;
}

/**
 * 根据开始时间结束时间及报表类型获取具体日期集合
 * 
 * @param from 开始时间
 * @param to 结束时间
 * @param period 报表类型
 * @return 具体日期集合
 */
public static String getTradingDates(int from, int to, String period) {
   String dates = "";
   String[] periods = period.split(",");
   for (String p : periods) {
      for (int i = from; i < to; i++) {
         String date = ExcelUtil.getDateByPeriod(String.valueOf(i), p);
         if (!dates.contains(date)) {
            dates += ",'" + date + "'";
         }
      }
   }
   dates = dates.replaceFirst(",", "");
   return dates;
}

/**
 * 根据其他币种类型及金额转换为人民币
 *
 * @param money 金额
 * @param currency 币种代码
 * @return 人民币金额
 */
public static BigDecimal getRMBByOther(BigDecimal money, String currency) {

   if (money == null || money.toString().contains("-")) {
      return new BigDecimal("0");
   }
   switch (currency) {
      case "RMB":
         return money.setScale(5, BigDecimal.ROUND_HALF_UP);
      case "USD":
         return money.multiply(new BigDecimal(6.617)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "HKD":
         return money.multiply(new BigDecimal(0.848)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "EUR":
         return money.multiply(new BigDecimal(7.82)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "YJP":
         return money.multiply(new BigDecimal(0.0585)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "KRW":
         return money.multiply(new BigDecimal(0.005855)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "CAD":
         return money.multiply(new BigDecimal(5.2983)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "GBP":
         return money.multiply(new BigDecimal(8.7232)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "AUD":
         return money.multiply(new BigDecimal(5.197)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "CHF":
         return money.multiply(new BigDecimal(6.7438)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "SGD":
         return money.multiply(new BigDecimal(4.873)).setScale(5, BigDecimal.ROUND_HALF_UP);
      case "TWD":
         return money.multiply(new BigDecimal(0.2189)).setScale(5, BigDecimal.ROUND_HALF_UP);
   }
   return null;
}

DateUtil

/**
 * 获取当前时间的前 day天的日期
 * 
 * @param day 天数
 * @return 字符串格式的前一天日期
 */
public static Date getBeforeDate(int day) {
   Date date = new Date();
   Calendar calendar = Calendar.getInstance();
   calendar.setTime(date);
   calendar.add(Calendar.DATE, -day);
   return calendar.getTime();
}

/**
 * 获取某日期距离今天的天数
 *
 * @param date 日期
 * @return 天数
 */
public static int getDateToDay(Date date) {
   Date day = new Date();
   Calendar calendar = Calendar.getInstance();
   calendar.setTime(day);
   int newday = calendar.get(Calendar.DAY_OF_YEAR);
   calendar.setTime(date);
   return newday - calendar.get(Calendar.DAY_OF_YEAR);
}

/**
 * 根据date返回字符串日期
 * 
 * @param date 日期
 * @return 字符串类型日期
 */
public static String getStringDate(Date date) {
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   return sdf.format(date);
}

/**
 * 根据date和格式化类型转换格式
 * 
 * @param date date
 * @param format 格式化类型
 * @return 格式类型的时间
 */
public static String getStringDate(Date date, String format) {
   SimpleDateFormat sdf = new SimpleDateFormat(format);
   return sdf.format(date);
}

/**
 * date转string
 * 
 * @param date date
 * @return string
 * @throws Exception 转换异常
 */
public static Date getDateByString(String date) throws Exception {
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   return sdf.parse(date);
}

/**
 * 判断字符串是否能够转成日期类型
 * 
 * @param date 待检测字符串
 * @return 检测结果
 */
public static boolean getDateByStringExist(String date) {
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   try {
      sdf.parse(date);
      return true;
   } catch (ParseException e) {
      return false;
   }
}

/**
 * 判断字符串是否能够转成日期类型
 *
 * @param date 待检测字符串
 * @return 检测结果
 */
public static boolean getDateByStringExist(String date, String format) {
   SimpleDateFormat sdf = new SimpleDateFormat(format);
   try {
      sdf.parse(date);
      return true;
   } catch (ParseException e) {
      return false;
   }
}