计算公式

来源:互联网 发布:血腥爱情故事 知乎 编辑:程序博客网 时间:2024/04/28 02:40

开发经常碰到的一些转换计算问题方法

数据计算公式

private static final int DEF_DIV_SCALE = 10;   //小数点后位数
 private static DecimalFormat df = new DecimalFormat("##0.000000");
 /**
  * 字字符串转成BigDecimal 对象
  * @param arg
  * @return
  */
 public static BigDecimal str2BigDecimal(String arg) {
  BigDecimal v = new BigDecimal(0.00);
  if (arg == null)
   return v;
  try {
   v = new BigDecimal(arg);
  } catch (Exception e) {
   return v;
  }
  return v;
 }
 /**
  * 提供精确的加法运算。
  *
  * @param v1
  *            被加数
  * @param v2
  *            加数
  * @return 两个参数的和
  */
 public static double add(double v1, double v2) {
  BigDecimal b1 = new BigDecimal(Double.toString(v1));
  BigDecimal b2 = new BigDecimal(Double.toString(v2));
  return b1.add(b2).doubleValue();
 }
 /**
  * 提供字符串型数值相加的计算
  * @param v1
  * @param v2
  * @return
  */
 public static String add(String v1, String v2) {
  BigDecimal b1 = str2BigDecimal(v1);
  BigDecimal b2 = str2BigDecimal(v2);
  return b1.add(b2).toString();
 }
 /**
  * 提供精确的减法运算。
  *
  * @param v1
  *            被减数
  * @param v2
  *            减数
  * @return 两个参数的差
  */
 public static double sub(double v1, double v2) {
  BigDecimal b1 = new BigDecimal(Double.toString(v1));
  BigDecimal b2 = new BigDecimal(Double.toString(v2));
  return b1.subtract(b2).doubleValue();
 }
 /**
  * 提供字符串型数值相减的计算
  * @param v1
  * @param v2
  * @return
  */
 public static String sub(String v1,String v2){
  BigDecimal b1 = str2BigDecimal(v1);
  BigDecimal b2 = str2BigDecimal(v2);
  return b1.subtract(b2).toString();
 }
 
 /**
  * 提供精确的乘法运算。
  *
  * @param v1
  *            被乘数
  * @param v2
  *            乘数
  * @return 两个参数的积
  */
 public static double mul(double v1, double v2) {
  BigDecimal b1 = new BigDecimal(Double.toString(v1));
  BigDecimal b2 = new BigDecimal(Double.toString(v2));
  return b1.multiply(b2).doubleValue();
 }
 /**
  * 提供两个字符串精确的乘法运算。
  *
  * @param v1
  *            被乘数
  * @param v2
  *            乘数
  * @return 两个参数的积
  */
 public static String mul(String v1,String v2){
  BigDecimal b1 = str2BigDecimal(v1);
  BigDecimal b2 = str2BigDecimal(v2);
  return b1.multiply(b2).toString();
 }
 
 
 /**
  * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
  *
  * @param v1
  *            被除数
  * @param v2
  *            除数
  * @param scale
  *            表示表示需要精确到小数点以后几位。
  * @return 两个参数的商
  * @throws IllegalArgumentException
  */
 public static String div(String v1,String v2){
  BigDecimal b1 = str2BigDecimal(v1);
  BigDecimal b2 = str2BigDecimal(v2);
  return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).toString();
 }
 
 
 /**
  * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
  *
  * @param v1
  *            被除数
  * @param v2
  *            除数
  * @return 两个参数的商
  */
 public static double div(double v1, double v2) {
  return div(v1, v2, DEF_DIV_SCALE);
 }
 /**
  * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
  *
  * @param v1
  *            被除数
  * @param v2
  *            除数
  * @param scale
  *            表示表示需要精确到小数点以后几位。
  * @return 两个参数的商
  * @throws IllegalArgumentException
  */
 public static double div(double v1, double v2, int scale) {
  if (scale < 0) {
   return 0;
  }
  BigDecimal b1 = new BigDecimal(Double.toString(v1));
  BigDecimal b2 = new BigDecimal(Double.toString(v2));
  return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
 }
 /**
  * 提供精确的小数位四舍五入处理。
  *
  * @param v
  *            需要四舍五入的数字
  * @param scale
  *            小数点后保留几位
  * @return 四舍五入后的结果
  */
 public static double round(double v, int scale) {
  if (scale < 0) {
   return 0;
  }
  BigDecimal b = new BigDecimal(Double.toString(v));
  BigDecimal one = new BigDecimal("1");
  return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
 }
 
 /**
  * 四舍五入保留两位小数
  * @param v
  * @return
  */
 public static String round(String v){
  BigDecimal b=str2BigDecimal(v);
  BigDecimal one = new BigDecimal("1");
  return b.divide(one, 2, BigDecimal.ROUND_HALF_UP).toString();
 }

 

日期计算公式

/**
  * 把日期格式 20080131转换成 2008-01-31格式字符串
  *
  * @param strDate
  * @return
  */
 public static String getDateFormatStr(String strDate) {
  String str = "";
  if ("".equals(strDate) || strDate.length() != 8) {
   return str;
  }
  str = strDate.substring(0, 4) + "-" + strDate.substring(4, 6) + "-"
    + strDate.substring(6, 8);
  return str;
 }
 
/**
  * <p>
  * 计算两个日期之间的差额天数
  * </p>
  * 
  * @return
  */
 public static long getDifferenceDays(Date startDate, Date endDate) {
  long diffDays = 0;
  diffDays = endDate.getTime() - startDate.getTime();
  if (diffDays < 0) {
   return 0;
  }
  // 整除一天的微秒数,计算的天数恰好
  diffDays = diffDays / 1000 / 60 / 60 / 24;
  return diffDays;
 }
 /**
  * 在指定的基准日期上增加一天
  *
  * @param date
  *            基准日期
  * @return 增加一天后的日期
  */
 public static Date incDay(Date date) {
  return addDay(date, 1);
 }
 /**
  * 在指定的基准日期上增加(或减少)指定的天数
  *
  * @param date
  *            基准日期
  * @param days
  *            天数(负数则为减少)
  * @return 增加一天后的日期
  */
 public static Date addDay(Date date, int days) {
  Calendar calArg = Calendar.getInstance();
  calArg.setTime(date);
  calArg.add(Calendar.DATE, days);
  return calArg.getTime();
 }

 

0 0