From 355ac4393b44c87589dc01e4441fea0c2a04192c Mon Sep 17 00:00:00 2001 From: zerosaturation Date: Wed, 1 Jul 2026 12:45:17 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=BF=AE=E6=94=B9=E6=94=B6?= =?UTF-8?q?=E7=9B=8A=E7=9A=84=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taskService/service/revenue_service.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/backend/services/taskService/service/revenue_service.go b/backend/services/taskService/service/revenue_service.go index 7292c4b..d29e067 100644 --- a/backend/services/taskService/service/revenue_service.go +++ b/backend/services/taskService/service/revenue_service.go @@ -425,6 +425,19 @@ func CalculateBuff(likeCount int) int { } } +// roundHalfToEven 银行家四舍五入(round half to even) +// 当小数部分恰好为 0.5 时,向最近的偶数舍入,避免统计偏差 +// 例如:2.5 → 2, 3.5 → 4, 4.5 → 4, 5.5 → 6 +func roundHalfToEven(numerator, denominator int64) int64 { + quotient := numerator / denominator + remainder := numerator % denominator + half := denominator / 2 + if remainder > half || (remainder == half && quotient%2 != 0) { + quotient++ + } + return quotient +} + // CalculateExhibitionRevenue 计算单次上架收益(参考实现,未被调用) // 注意:实际收益计算在 OnExhibitionCompleted 中通过 AssetLevelService.CalculateRevenue 实现 // 此函数保留用于参考和测试场景 @@ -449,9 +462,9 @@ func CalculateExhibitionRevenue(likeCount int, startTime, endTime int64, revenue // 基础收益 baseRevenue := R0 * T - // 应用Buff加成 + // 应用Buff加成(银行家四舍五入) // R1 = R0 × T × (100% + Buff) - buffedRevenue := baseRevenue * (100 + int64(buff)) / 100 + buffedRevenue := roundHalfToEven(baseRevenue*(100+int64(buff)), 100) // 应用永久收益提升 if revenueBoostBps > 0 {