商品满减、限时活动、折扣活动的计算最划算 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

总结

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

相关推荐
郭萌6962 分钟前
用 200 行 JS 实现“渐进式 JSON”——让网页加载速度快到飞起!
后端
一只叫煤球的猫4 分钟前
Spring AI 2.0 源码解析(四):Prompt、Message、Options 的对象模型
后端·面试·ai编程
名字还没想好☜6 分钟前
Spring @EventListener 事件驱动解耦实战:同步转异步、事务绑定与顺序控制
java·数据库·后端·python·spring
可乐鸡翅yeah_18 分钟前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放
szarron34 分钟前
RF Demo Kit|NanoVNA 射频演示测试板完整上手教程,滤波器、衰减器、SOLT 校准学习板
开发语言·人工智能·学习·php·射频工程·频谱仪
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day39|SpringAI 会话存储、Function‑Call 工具调用、MCP 思维导图复盘
java·开发语言·spring boot·学习·阿里云
万物智能信息科技1 小时前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos
掘金挖土1 小时前
前端手摸手跑路之 AI 应用开发(三)
前端·后端
蓝悦无人机1 小时前
Qt Design Studio(QDS)4.8.2项目文件结构详解
开发语言·qt·qt creator·qds·项目文件结构·qtc
胡写代码1 小时前
若依 + MyBatis-Plus,分页为什么悄悄失效了?
java·后端