浏览代码

修复套题小题分的计算规则,向下取整,包含0.5

宋悦 7 年之前
父节点
当前提交
a55210343d

+ 17 - 1
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/CommonUtils.java

@@ -285,6 +285,21 @@ public final class CommonUtils {
         return formatNumber.setScale(2, RoundingMode.HALF_UP).doubleValue();
     }
 
+    /**
+     * 向下取整,可以取0.5
+     * @param number
+     * @return
+     */
+    public static double formatDoubleFloor(double number){
+        BigDecimal formatNumber = new BigDecimal(number);
+        double floorNumber = formatNumber.setScale(0, RoundingMode.FLOOR).doubleValue();
+        if(number >= floorNumber && number < floorNumber + 0.5){
+            return floorNumber;
+        }else{
+            return floorNumber + 0.5;
+        }
+    }
+
     /**
      * 补全html标签
      * @param htmlStr
@@ -403,6 +418,7 @@ public final class CommonUtils {
         // QuesStructType quesStructType = getEnum(QuesStructType.class,"单选");
         // System.out.println(quesStructType.getName());
         // System.out.println(characterToNumber("A"));
-        System.out.println("");
+        System.out.println(formatDoubleFloor(3.61));
+        System.out.println(formatDoubleFloor(3.0));
     }
 }

+ 11 - 3
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/service/GenPaperService.java

@@ -393,9 +393,17 @@ public class GenPaperService {
                         List<Question> subQuestions = question.getSubQuestions();
                         List<Double> subScoreList = new ArrayList<>();
                         if(subQuestions != null && subQuestions.size() > 0){
-                            for(Question subQuestion:subQuestions){
-                                double score = paperDetailUnit.getScore()/ subQuestions.size();
-                                subScoreList.add(CommonUtils.formatDouble(score));
+                            int subQuesLen = subQuestions.size();
+                            double subTotalScore = paperDetailUnit.getScore();
+                            for(int j = 0;j < subQuesLen;j++){
+                                double avgScore = subTotalScore / subQuestions.size();
+                                //向下取整,包含0.5
+                                double formatScore = CommonUtils.formatDoubleFloor(avgScore);
+                                if(j == subQuesLen - 1){
+                                    subScoreList.add(subTotalScore - formatScore * j);
+                                }else{
+                                    subScoreList.add(formatScore);
+                                }
                             }
                             paperDetailUnit.setSubScoreListNew(subScoreList);
                         }