Jelajahi Sumber

公式-换算值
1、计算逻辑调整

LHB 2 minggu lalu
induk
melakukan
e1d9b47e57

+ 42 - 6
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -3173,8 +3173,10 @@ public class CustomFunction {
                     String[] split = surveyDepthStr.split(surveyDepthStr.contains(",") ? "," : "、");
                     //计算平均值
                     h = Arrays.stream(split).filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).average().orElse(0.0);
+                    h = h * 2;
                     //进行0.5修正
                     h = roundHalfEven(new BigDecimal(h).setScale(1, RoundingMode.HALF_UP).doubleValue(),1);
+                    h = h / 2;
                 }else{
                     List<Object> surveyDepthList = obj3ListNe(surveyDepth);
                     List<Double> doubleArrList = new ArrayList<>();
@@ -3184,12 +3186,17 @@ public class CustomFunction {
                         String[] split = string.split(string.contains(",") ? "," : "、");
                         //计算平均值
                         double avg = Arrays.stream(split).filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).average().orElse(0.0);
-                        doubleArrList.add(roundHalfEven(new BigDecimal(avg).setScale(1, RoundingMode.HALF_UP).doubleValue(),1));
+                        avg = avg * 2;
+                        avg = roundHalfEven(new BigDecimal(avg).setScale(1, RoundingMode.HALF_UP).doubleValue(),1);
+                        avg = avg / 2;
+                        doubleArrList.add(avg);
                     });
                     //结果再计算平均值
                     h = doubleArrList.stream().mapToDouble(Double::doubleValue).average().orElse(0.0);
-                    //在进行修正
+                    h = h * 2;
+                    //进行0.5修正
                     h = roundHalfEven(new BigDecimal(h).setScale(1, RoundingMode.HALF_UP).doubleValue(),1);
+                    h = h / 2;
                 }
 
                 //是否泵送
@@ -3238,7 +3245,8 @@ public class CustomFunction {
         // 获取小数部分
         BigDecimal integerPart = new BigDecimal(bd.toBigInteger().toString());
         BigDecimal decimalPart = bd.subtract(integerPart);
-
+        //整数部分
+        BigDecimal bigDecimal = bd.setScale(0, RoundingMode.DOWN);
         // 如果小数部分为0,直接返回
         if (decimalPart.compareTo(BigDecimal.ZERO) == 0) {
             return number;
@@ -3252,13 +3260,41 @@ public class CustomFunction {
 
         if (firstDigit < 5) {
             // 小数位数小于5,改成5
-            return integerPart.add(new BigDecimal("0.5")).doubleValue();
+            return bigDecimal.doubleValue();
         } else if (firstDigit > 5) {
             // 小数位数大于5,四舍五入到整数
             return bd.setScale(0, RoundingMode.HALF_UP).doubleValue();
         } else {
-            // 等于5,不变
-            return number;
+            //小数部分乘以10,获取之后的小数位数
+            BigDecimal bigDecimal1 = decimalPart.multiply(BigDecimal.TEN);
+            BigDecimal integerPart2 = new BigDecimal(bigDecimal1.toBigInteger().toString());
+            BigDecimal decimalPart2 = bigDecimal1.subtract(integerPart2);
+
+
+            //对整数仅以
+            double v = bigDecimal.add(BigDecimal.valueOf(1)).doubleValue();
+            //如果==0,就按照最开始的整数部分奇偶来计算 奇进偶退
+            if (decimalPart2.compareTo(BigDecimal.ZERO) == 0) {
+                //奇数
+                if(!isEven(bigDecimal)){
+                   return v;
+                } else {
+                    return bigDecimal.doubleValue();
+                }
+            }else{
+                return v;
+            }
         }
     }
+
+    public static boolean isEven(BigDecimal number) {
+        // 检查是否为整数
+        if (number.scale() > 0 && number.stripTrailingZeros().scale() > 0) {
+            throw new IllegalArgumentException("只能判断整数的奇偶性");
+        }
+
+        // 使用 remainder() 方法计算除以2的余数
+        BigDecimal remainder = number.remainder(BigDecimal.valueOf(2));
+        return remainder.compareTo(BigDecimal.ZERO) == 0;
+    }
 }