|
@@ -429,6 +429,8 @@ public class CustomFunction {
|
|
|
}
|
|
|
return "";
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
public static Object dateOffset(List<String> dateList,LinkedList<Integer> offSet){
|
|
|
List<String> result = new ArrayList<>();
|
|
|
if(ListUtils.isNotEmpty(dateList)&&ListUtils.isNotEmpty(offSet)){
|
|
@@ -2576,6 +2578,12 @@ public class CustomFunction {
|
|
|
return dXd(design, data, xN, scale, mode);
|
|
|
}
|
|
|
|
|
|
+// public static void main(String[] args) {
|
|
|
+// String a="100*100";
|
|
|
+// List<Object>list = new ArrayList<>(Arrays.asList("101*102","201*198"));
|
|
|
+// list.forEach(d-> System.out.println(dXd(a,d)));
|
|
|
+// }
|
|
|
+
|
|
|
/**
|
|
|
* @return java.lang.Object
|
|
|
* @Description 求偏差公式 支持AXA-BXB=DXD或者A-B=D的格式
|
|
@@ -2591,16 +2599,26 @@ public class CustomFunction {
|
|
|
if (StringUtils.isEmpty(scale)) {
|
|
|
scale = 0;
|
|
|
}
|
|
|
- String delimiter = handleNull(matcherFindGroup("[^0-9.]", design.toString(), 0, false));
|
|
|
+ String delimiter = handleNull(matcherFindGroup("[^0-9./]", design.toString(), 0, false));
|
|
|
if (StringUtils.isEmpty(delimiter)) {
|
|
|
delimiter = CONCAT;
|
|
|
}
|
|
|
+ String delimiter2 = handleNull(matcherFindGroup("[^0-9.]", design.toString(), 0, false));
|
|
|
+ if (StringUtils.isEmpty(delimiter2)) {
|
|
|
+ delimiter2 = CONCAT;
|
|
|
+ }
|
|
|
String[] dArr = handleNull(design).split("[" + delimiter + "]");
|
|
|
- String[] bArr = handleNull(data).split("[" + delimiter + "]");
|
|
|
+ String[] bArr = handleNull(data).split("[" + delimiter2 + "]");
|
|
|
Object _dx = null;
|
|
|
for (int n = 0; n < dArr.length; n++) {
|
|
|
- BigDecimal a = new BigDecimal(dArr[n]);
|
|
|
- BigDecimal b = new BigDecimal(bArr[n]);
|
|
|
+ String dsg=dArr[n];
|
|
|
+ String xd=bArr[n];
|
|
|
+ if(dsg.contains("/")){
|
|
|
+ String[] dsgA= dsg.split("/");
|
|
|
+ dsg= Arrays.stream(dsgA).filter(StringUtils::isNumber).min(Comparator.comparingDouble(e->Math.abs(StringUtils.obj2Double(calculate(xd,e,3,2))))).orElse(dsg);
|
|
|
+ }
|
|
|
+ BigDecimal a = new BigDecimal(dsg);
|
|
|
+ BigDecimal b = new BigDecimal(xd);
|
|
|
String _data;
|
|
|
if (StringUtils.isEquals(1, mode)) {
|
|
|
_data = b.multiply(a).multiply(new BigDecimal(xN.toString())).setScale(Integer.parseInt(scale.toString()), ROUND_HALF_UP).toString();
|
|
@@ -2608,7 +2626,7 @@ public class CustomFunction {
|
|
|
_data = b.subtract(a).multiply(new BigDecimal(xN.toString())).setScale(Integer.parseInt(scale.toString()), ROUND_HALF_UP).toString();
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(_dx)) {
|
|
|
- _dx = StringUtils.join(_dx, _data, delimiter);
|
|
|
+ _dx = StringUtils.join(_dx, _data, delimiter2);
|
|
|
} else {
|
|
|
_dx = _data;
|
|
|
}
|