分數精度
所有分數欄位 DB schema 為
decimal(6,3)——支援 0.125 公式造成的 3 位小數。
為什麼 (6,3) 不是 (5,2)
出勤扣分每小時 0.125 → 累積會產生 -0.375 / 69.625 / 75.125 等需要 3 位小數的數字。
舊 decimal(5,2) 會精度損失,2026/04/17 遷移加寬至 decimal(6,3)。
涉及欄位
| 表 | 欄位 |
|---|---|
ExamRecord | ScoreA ~ ScoreI、AttendanceDeduction |
ExamParticipant | FinalScore、ScoreBeforeAdjust |
AnnualResult | *Score(多欄) |
GradeAdjustment | OriginalScore、AdjustedScore |
遷移
Migrations/20260417113907_WidenScoreDecimalsTo6_3
歷史資料重算
修正舊 decimal(5,2) 累積的精度損失:
- SQL 腳本:
Docs/dev/recalc_scores.sql - API:
POST /api/hr/recalc-scores
前端顯示統一
用 fmtScore:
- 預設 3 位小數
- 尾數 0 時降為 2 位(避免「75.250」這種冗餘顯示)
評分輸入限制
| 動作 | 精度 |
|---|---|
| 評分選項(10 個) | 0.5 單位(0.5, 1.0, … 5.0) |
| 強制修正 / 調整分數 | 0.5 單位四捨五入(前端 onBlur 自動 round) |
例:使用者輸入 75.3333 → onBlur → 75.5
相關概念
強連結(原文明確提及)
- 出勤扣分 — 0.125 公式來源
- GradingService
- 考核表單對應規則
← 回到 wiki