商品满减、限时活动、折扣活动的计算最划算 golang

可以对商品的不同活动(如满减、限时价和折扣)进行分组,并在购物车中显示各个活动标签下的最优价格组合。以下代码将商品按活动类别进行分组计算,并输出在购物车中的显示信息。

Go 复制代码
package main

import (
	"fmt"
	"math"
)

type Discount struct {
	Name          string  // 商品名称
	OriginalPrice float64 // 原价
	FullReduction float64 // 满减金额
	LimitedPrice  float64 // 限时优惠价
	DiscountRate  float64 // 折扣比例 (如0.8代表8折)
}

// ActivityGroup 存储商品按最优活动标签分组
type ActivityGroup struct {
	Tag   string      // 活动标签
	Items []Discount  // 商品列表
	Total float64     // 总价格
}

// calculateBestActivityTag 计算商品最优惠的活动标签和价格
func calculateBestActivityTag(item Discount) (string, float64) {
	// 计算每种活动优惠后的价格
	fullReductionPrice := item.OriginalPrice - item.FullReduction
	if fullReductionPrice < 0 {
		fullReductionPrice = 0
	}
	discountPrice := item.OriginalPrice * item.DiscountRate
	limitedPrice := item.LimitedPrice

	// 选择最小的价格和对应活动标签
	bestPrice := math.Min(math.Min(fullReductionPrice, discountPrice), limitedPrice)
	var bestTag string
	switch bestPrice {
	case fullReductionPrice:
		bestTag = "满减活动"
	case discountPrice:
		bestTag = "折扣活动"
	case limitedPrice:
		bestTag = "限时价活动"
	}
	return bestTag, bestPrice
}

// groupItemsByBestActivity 根据最优活动将商品分组
func groupItemsByBestActivity(items []Discount) []ActivityGroup {
	activityMap := make(map[string]*ActivityGroup)

	for _, item := range items {
		bestTag, bestPrice := calculateBestActivityTag(item)
		if activityMap[bestTag] == nil {
			activityMap[bestTag] = &ActivityGroup{Tag: bestTag, Items: []Discount{}}
		}
		activityMap[bestTag].Items = append(activityMap[bestTag].Items, item)
		activityMap[bestTag].Total += bestPrice
	}

	// 将结果转为 slice 以便输出
	var groupedActivities []ActivityGroup
	for _, activity := range activityMap {
		groupedActivities = append(groupedActivities, *activity)
	}
	return groupedActivities
}

func main() {
	// 示例商品数据
	items := []Discount{
		{Name: "商品A", OriginalPrice: 100, FullReduction: 10, LimitedPrice: 90, DiscountRate: 0.9},
		{Name: "商品B", OriginalPrice: 150, FullReduction: 20, LimitedPrice: 130, DiscountRate: 0.85},
		{Name: "商品C", OriginalPrice: 200, FullReduction: 25, LimitedPrice: 180, DiscountRate: 0.8},
		{Name: "商品D", OriginalPrice: 120, FullReduction: 5, LimitedPrice: 110, DiscountRate: 0.95},
	}

	// 根据最优活动分组商品
	groupedActivities := groupItemsByBestActivity(items)

	// 输出结果
	for _, group := range groupedActivities {
		fmt.Printf("活动标签: %s\n", group.Tag)
		for _, item := range group.Items {
			fmt.Printf("  商品: %s, 原价: %.2f\n", item.Name, item.OriginalPrice)
		}
		fmt.Printf("  该活动下商品总价: %.2f\n\n", group.Total)
	}
}
  1. calculateBestActivityTag函数:接收商品的所有优惠信息,计算每个优惠方式的价格,并返回最低价格对应的活动标签及该价格。
  2. groupItemsByBestActivity函数 :通过调用 calculateBestActivityTag 函数,将商品按最优活动标签分组,并累加每个活动下的商品总价。
  3. main函数:定义商品数据并调用函数计算分组结果。

示例输出

运行此代码将按最优活动标签输出分组的商品和每个活动下的总优惠价,例如:

复制代码
html 复制代码
活动标签: 满减活动
  商品: 商品A, 原价: 100.00
  商品: 商品C, 原价: 200.00
  该活动下商品总价: 265.00

活动标签: 折扣活动
  商品: 商品B, 原价: 150.00
  该活动下商品总价: 127.50

活动标签: 限时价活动
  商品: 商品D, 原价: 120.00
  该活动下商品总价: 110.00

总结

此方法能够动态计算商品最优惠的活动标签,将其分组显示在购物车中,方便查看各个活动下的总价。

相关推荐
Conan在掘金6 分钟前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端
雪碧透心凉_26 分钟前
while 循环与循环嵌套
开发语言·python
人间凡尔赛32 分钟前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
乐观勇敢坚强的老彭33 分钟前
信奥C++一维数组笔记
开发语言·c++·笔记
这就是佬们吗41 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
IT_陈寒1 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
卷无止境1 小时前
提升 Python 代码健壮性的方法大盘点
后端·python
snow@li1 小时前
Spring Boot:项目服务器完整部署教程(零基础可直接实操)
服务器·spring boot·后端
asdzx671 小时前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf