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

总结

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

相关推荐
石山代码15 分钟前
C++ 内存分区 堆区
java·开发语言·c++
无风听海35 分钟前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠1 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
LuminousCPP2 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
web3.08889992 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python
один but you3 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
IT_陈寒3 小时前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端
kyriewen3 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
文心快码BaiduComate4 小时前
干货|Comate Harness Engineering工程实践指南
前端·后端·程序员
光辉GuangHui4 小时前
Agent Skill 也需要测试:如何搭建 Skill 评估框架
前端·后端·llm