|
@@ -17,12 +17,14 @@ import com.qmth.boot.core.exception.StatusException;
|
|
* @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
|
|
* @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
|
|
*/
|
|
*/
|
|
public class Calculator {
|
|
public class Calculator {
|
|
|
|
+
|
|
public static double mean(double[] values) {
|
|
public static double mean(double[] values) {
|
|
if (values.length == 0) {
|
|
if (values.length == 0) {
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
return StatUtils.mean(values);
|
|
return StatUtils.mean(values);
|
|
}
|
|
}
|
|
|
|
+
|
|
public static double correlation(double[] x, double[] y) {
|
|
public static double correlation(double[] x, double[] y) {
|
|
if (x.length != y.length) {
|
|
if (x.length != y.length) {
|
|
throw new StatusException("两组样本数据数量大小不一致!");
|
|
throw new StatusException("两组样本数据数量大小不一致!");
|
|
@@ -39,6 +41,7 @@ public class Calculator {
|
|
}
|
|
}
|
|
return r;
|
|
return r;
|
|
}
|
|
}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 加法 保留两位小数
|
|
* 加法 保留两位小数
|
|
*
|
|
*
|
|
@@ -65,22 +68,24 @@ public class Calculator {
|
|
return b1.add(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
return b1.add(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
- /** 加法 保留指定位小数
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 加法 保留指定位小数
|
|
|
|
+ *
|
|
* @param ds
|
|
* @param ds
|
|
* @param len
|
|
* @param len
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public static double add(List<Double> ds, int len) {
|
|
public static double add(List<Double> ds, int len) {
|
|
- if(CollectionUtils.isEmpty(ds)) {
|
|
|
|
|
|
+ if (CollectionUtils.isEmpty(ds)) {
|
|
throw new StatusException("数组为空");
|
|
throw new StatusException("数组为空");
|
|
}
|
|
}
|
|
BigDecimal ret = new BigDecimal(0.0);
|
|
BigDecimal ret = new BigDecimal(0.0);
|
|
- for(Double d:ds) {
|
|
|
|
- if(d==null) {
|
|
|
|
|
|
+ for (Double d : ds) {
|
|
|
|
+ if (d == null) {
|
|
throw new StatusException("数组元素为空");
|
|
throw new StatusException("数组元素为空");
|
|
}
|
|
}
|
|
- ret=ret.add(new BigDecimal(d));
|
|
|
|
|
|
+ ret = ret.add(new BigDecimal(d));
|
|
}
|
|
}
|
|
return ret.setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
return ret.setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
|
|
@@ -112,7 +117,10 @@ public class Calculator {
|
|
return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
|
|
}
|
|
}
|
|
- /**差值绝对值
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 差值绝对值
|
|
|
|
+ *
|
|
* @param v1
|
|
* @param v1
|
|
* @param v2
|
|
* @param v2
|
|
* @param len
|
|
* @param len
|
|
@@ -121,13 +129,14 @@ public class Calculator {
|
|
public static double absoluteDiff(double v1, double v2, int len) {
|
|
public static double absoluteDiff(double v1, double v2, int len) {
|
|
BigDecimal b1 = new BigDecimal(v1);
|
|
BigDecimal b1 = new BigDecimal(v1);
|
|
BigDecimal b2 = new BigDecimal(v2);
|
|
BigDecimal b2 = new BigDecimal(v2);
|
|
- if(v1>v2) {
|
|
|
|
|
|
+ if (v1 > v2) {
|
|
return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
- }else {
|
|
|
|
|
|
+ } else {
|
|
return b2.subtract(b1).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
return b2.subtract(b1).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 乘法 保留两位小数
|
|
* 乘法 保留两位小数
|
|
*
|
|
*
|
|
@@ -154,8 +163,7 @@ public class Calculator {
|
|
return b1.multiply(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
return b1.multiply(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 除法 保留两位小数
|
|
* 除法 保留两位小数
|
|
*
|
|
*
|
|
@@ -183,18 +191,24 @@ public class Calculator {
|
|
}
|
|
}
|
|
|
|
|
|
public static String divide2String(Double v1, Double v2, int len) {
|
|
public static String divide2String(Double v1, Double v2, int len) {
|
|
- if(v1==null||v2==null||v2==0) {
|
|
|
|
|
|
+ if (v1 == null || v2 == null || v2 == 0) {
|
|
return "-";
|
|
return "-";
|
|
}
|
|
}
|
|
BigDecimal b1 = new BigDecimal(v1);
|
|
BigDecimal b1 = new BigDecimal(v1);
|
|
BigDecimal b2 = new BigDecimal(v2);
|
|
BigDecimal b2 = new BigDecimal(v2);
|
|
return String.valueOf(b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
return String.valueOf(b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public static String percentage(double v1, double v2, int len) {
|
|
public static String percentage(double v1, double v2, int len) {
|
|
BigDecimal b1 = new BigDecimal(v1);
|
|
BigDecimal b1 = new BigDecimal(v1);
|
|
BigDecimal b2 = new BigDecimal(v2);
|
|
BigDecimal b2 = new BigDecimal(v2);
|
|
BigDecimal b3 = new BigDecimal(100);
|
|
BigDecimal b3 = new BigDecimal(100);
|
|
- return b1.divide(b2, len+2, BigDecimal.ROUND_HALF_UP).multiply(b3).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue()+"%";
|
|
|
|
|
|
+ return b1.divide(b2, len + 2, BigDecimal.ROUND_HALF_UP).multiply(b3).setScale(len, BigDecimal.ROUND_HALF_UP)
|
|
|
|
+ .doubleValue() + "%";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static double scale(double v1, int len) {
|
|
|
|
+ BigDecimal b1 = new BigDecimal(v1);
|
|
|
|
+ return b1.setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
}
|
|
}
|
|
}
|
|
}
|