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

总结

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

相关推荐
wifi___14 分钟前
全局异常处理的原理
java·开发语言
平常心的技术小牛4 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆4 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
To_OC4 小时前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
Python私教4 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
Python私教6 小时前
从表格到管理系统:别先写页面,先补齐权限、流程和审计
数据库·后端·架构
余额瞒着我当琳6 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
圣殿骑士-Khtangc6 小时前
Go-Prometheus指标采集与监控全栈实践
golang
坐吃山猪6 小时前
WebClient内存配置解析
开发语言·springboot·webflux
北斗落凡尘6 小时前
LangGraph 入门实战(12)--使用MCP
后端·python·langchain