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

news/2024/11/6 13:05:48/

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

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.ppmy.cn/news/1544821.html

相关文章

c语言简单编程练习10

1、typedef和#define的区别 在用作数据类型替换时的区别&#xff1a; #include <stdio.h> #include <unistd.h>typedef char * A; //typedef需要&#xff1b; #define B char *int main(int argc, char *argv[]) {A a,b;B c,d;printf("a_size%ld\n"…

浅析Android Handler机制实现原理

0. 背景描述 Android系统出于对简单、高效的考虑&#xff0c;在设计UI体系时采用了单线程模型&#xff0c;即不会在多个线程中对同一个UI界面执行操作。简单是指单线程模型可以不用考虑和处理在多线程环境下操作UI带来的线程安全问题&#xff0c;高效是指单线程模型下无需通过…

视频一键转换3D:Autodesk 发布 Video to 3D Scene

Video 3D Scene 最近 Autodesk 旗下公司 Wonder Dynamics 推出了 Wonder Animation 的测试版&#xff0c;它使用突破性的视频到 3D 场景技术&#xff0c;通过将任何视频序列转换为 3D 动画场景来加速动画电影的制作。 Video 3D Scene Video 3D Scene 生成效果 作为 Wonder Stud…

了解分布式数据库系统中的CAP定理

在分布式数据库系统的设计和实现中&#xff0c;CAP定理是一个至关重要的概念。CAP定理&#xff0c;全称为一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容忍性&#xff08;Partition tolerance&#xff09;定理&#xff0c;由…

求职经验分享

更多详情&#xff1a;爱米的前端小笔记&#xff0c;更多前端内容&#xff0c;等你来看&#xff01;这些都是利用下班时间整理的&#xff0c;整理不易&#xff0c;大家多多&#x1f44d;&#x1f49b;➕&#x1f914;哦&#xff01;你们的支持才是我不断更新的动力&#xff01;找…

爬虫技术——小白入狱案例

知孤云出岫 目录 1. 案例概述2. 案例需求分析3. 实现步骤Step 1: 环境准备Step 2: 分析百度图片URL请求规律Step 3: 编写爬虫代码代码解析 4. 运行代码5. 注意事项6. 案例总结 要实现大批量爬取百度图片&#xff0c;可以使用Python编写一个网络爬虫&#xff0c;通过发送HTTP请求…

如何使用Puppeteer和Node.js爬取大学招生数据:入门指南

1. 引言 在数据驱动的时代&#xff0c;招生数据为学生和教育机构提供了许多宝贵的信息。通过分析和挖掘各大学的招生数据&#xff08;如录取率、标准化考试分数、班级排名和高中平均绩点&#xff09;&#xff0c;不仅能帮助学生做出合理的选择&#xff0c;还能为教育政策的制定…

element根据输入,动态生成表格

场景:后台页面根据商品规格和规格值&#xff0c;动态(增删改查)在表格中生成对应的sku. 如图: 代码如下: edit.html <template xmlns""><div class"app-container"><el-form ref"form" :model"form" label-width&qu…