All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 6m53s
统一处理百分比和系数两种折扣输入方式,增加边界保护 在金额计算中使用math.Round进行四舍五入处理 添加相关单元测试确保计算准确性
26 lines
723 B
Go
26 lines
723 B
Go
package order
|
||
|
||
import "github.com/perfect-panel/server/internal/types"
|
||
|
||
// getDiscount 计算最终价格倍数
|
||
// 参数:discounts 折扣规则列表(数量阈值 + 折扣倍数);inputMonths 购买时长
|
||
// 返回:最终价格倍数(如 0.95 表示按 95% 计价)
|
||
func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64) float64 {
|
||
var finalDiscount float64 = 1.0
|
||
|
||
for _, d := range discounts {
|
||
val := d.Discount
|
||
if val > 1 && val <= 100 {
|
||
val = val / 100.0
|
||
}
|
||
if val < 0 {
|
||
val = 0
|
||
}
|
||
if inputMonths >= d.Quantity && val < finalDiscount {
|
||
finalDiscount = val
|
||
}
|
||
}
|
||
|
||
return finalDiscount
|
||
}
|