فهرست منبع

feat: 分值精度

zhangjie 5 ماه پیش
والد
کامیت
23e8d0c35b
2فایلهای تغییر یافته به همراه36 افزوده شده و 7 حذف شده
  1. 15 0
      src/utils/utils.ts
  2. 21 7
      src/views/base/track-export/useDraw.ts

+ 15 - 0
src/utils/utils.ts

@@ -250,6 +250,21 @@ export function calcSum(dataList: number[]) {
   }, 0);
 }
 
+export function toPrecision(num: number, fractionDigits = 1): number {
+  if (fractionDigits < 0 || fractionDigits > 16) return num;
+
+  const tnum = 10 ** fractionDigits;
+  return Math.round(num * tnum) / tnum;
+}
+
+export function calcSumPrecision(
+  dataList: number[],
+  fractionDigits = 1
+): number {
+  const count = calcSum(dataList);
+  return toPrecision(count, fractionDigits);
+}
+
 /**
  * 计算评卷数
  * @param {Array} dataList 需要统计的数组

+ 21 - 7
src/views/base/track-export/useDraw.ts

@@ -6,7 +6,13 @@ import {
 import { Task, Track, SpecialTag, Question } from '@/api/types/task';
 import { TrackConfigType } from '@/store/modules/app/types';
 import { PictureTypeEnum, PICTURE_TYPE } from '@/constants/enumerate';
-import { calcSum, deepCopy, maxNum, strGbLen } from '@/utils/utils';
+import {
+  calcSumPrecision,
+  deepCopy,
+  maxNum,
+  strGbLen,
+  toPrecision,
+} from '@/utils/utils';
 
 import { DrawTrackItem } from '../../../../electron/preload/types';
 import { TrackTaskData } from '../../../../electron/db/models/trackTask';
@@ -657,8 +663,12 @@ export default function useDraw(drawConfig: DrawConfig) {
         });
       });
 
-      const score = calcSum(groupQuestions.map((item) => item.score || 0));
-      const maxScore = calcSum(groupQuestions.map((item) => item.maxScore));
+      const score = calcSumPrecision(
+        groupQuestions.map((item) => item.score || 0)
+      );
+      const maxScore = calcSumPrecision(
+        groupQuestions.map((item) => item.maxScore)
+      );
       const tCont = `得分:${score},满分:${maxScore}`;
       const tContLen = strGbLen(tCont) / 2;
       dataArr.push({
@@ -734,7 +744,9 @@ export default function useDraw(drawConfig: DrawConfig) {
           prename = isDoubleMark ? `${zhs[index] || ''}评` : '评卷员';
         }
 
-        const userScore = calcSum(user.scores.map((item) => item.score));
+        const userScore = calcSumPrecision(
+          user.scores.map((item) => item.score)
+        );
         const content = `${prename}:${user.userName},评分:${userScore}`;
         dataArr.push({
           type: 'text',
@@ -766,7 +778,7 @@ export default function useDraw(drawConfig: DrawConfig) {
   function getTotalTrack(image: ImageItem): DrawTrackItem {
     const totalScore = rawTask.markerScore || 0;
     const objectiveScore = rawTask.objectiveScore || 0;
-    const subjectiveScore = totalScore - objectiveScore;
+    const subjectiveScore = toPrecision(totalScore - objectiveScore);
     return {
       type: 'text',
       option: {
@@ -980,8 +992,10 @@ export default function useDraw(drawConfig: DrawConfig) {
               totalScore: qans.totalScore,
             };
           }
-          oaTagItem.score = calcSum(questions.map((q) => q.score || 0));
-          oaTagItem.totalScore = calcSum(
+          oaTagItem.score = calcSumPrecision(
+            questions.map((q) => q.score || 0)
+          );
+          oaTagItem.totalScore = calcSumPrecision(
             questions.map((q) => q.totalScore || 0)
           );
           const tCont = `得分:${oaTagItem.score},满分:${oaTagItem.totalScore}`;