当前位置: 首页 > news >正文

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

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

package mainimport ("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.FullReductionif fullReductionPrice < 0 {fullReductionPrice = 0}discountPrice := item.OriginalPrice * item.DiscountRatelimitedPrice := item.LimitedPrice// 选择最小的价格和对应活动标签bestPrice := math.Min(math.Min(fullReductionPrice, discountPrice), limitedPrice)var bestTag stringswitch 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 []ActivityGroupfor _, 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函数:定义商品数据并调用函数计算分组结果。

示例输出

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

 
活动标签: 满减活动商品: 商品A, 原价: 100.00商品: 商品C, 原价: 200.00该活动下商品总价: 265.00活动标签: 折扣活动商品: 商品B, 原价: 150.00该活动下商品总价: 127.50活动标签: 限时价活动商品: 商品D, 原价: 120.00该活动下商品总价: 110.00

总结

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

http://www.lryc.cn/news/475260.html

相关文章:

  • vue3 + ts + element-plus 二次封装 el-table
  • python传递json参数给php
  • 2.若依vue表格数据根据不同状态显示不同颜色style
  • JZ2440开发板——LCD
  • YOLOv6-4.0部分代码阅读笔记-yolo_lite.py
  • 奇瑞汽车:降阶模型在新能源汽车热管理仿真上的应用
  • 传统的自然语言处理评估指标
  • WPF+MVVM案例实战(十七)- 自定义字体图标按钮的封装与实现(ABC类)
  • Redis数据结构:List类型全面解析
  • 人工智能证书合集
  • php开发实战分析(8):优化MySQL分页查询与数量统计,提升数据库性能
  • shell脚本案例:RAC配置多路径时获取磁盘设备WWID和磁盘大小
  • Android Framework AMS(10)广播组件分析-1
  • 在 Node.js 中使用 .env 文件
  • CesiumJS 案例 P19:添加矩形、监听鼠标左击、监听鼠标右击、监听鼠标移动
  • 路测毫米波雷达标定和目标跟踪
  • 【sqlmap使用手册-持续更新中】
  • 面向对象三大特征之一:封 装
  • qt QMenuBar详解
  • ESP32的下的蓝牙应用笔记(1)——Beacon蓝牙信标
  • 控制台安全内部:创新如何塑造未来的硬件保护
  • 如何选择适合自己的 Python IDE
  • Matlab车牌识别课程设计报告模板(附源代码)
  • kubesphere jenkins自动重定向 http://ks-apiserver:30880/oauth/authorize
  • Vue3访问页面时自动获取数据
  • go语言回调函数的使用
  • 区块链学习笔记(一)
  • 解决QT打包发布App Store时(90238)错误
  • 使用Vite构建现代化前端应用
  • PyQt入门指南三十八 QWizard向导组件