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

总结

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

相关推荐
workflower10 小时前
单元测试-例子
java·开发语言·算法·django·个人开发·结对编程
YuanlongWang10 小时前
C# 基础——装箱和拆箱
java·开发语言·c#
摇滚侠11 小时前
Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
spring boot·笔记·后端
b78gb11 小时前
电商秒杀系统设计 Java+MySQL实现高并发库存管理与订单处理
java·开发语言·mysql
LXS_35712 小时前
Day 05 C++ 入门 之 指针
开发语言·c++·笔记·学习方法·改行学it
天若有情67313 小时前
Java Swing 实战:从零打造经典黄金矿工游戏
java·后端·游戏·黄金矿工·swin
etsuyou14 小时前
js前端this指向规则
开发语言·前端·javascript
一只叫煤球的猫14 小时前
建了索引还是慢?索引失效原因有哪些?这10个坑你踩了几个
后端·mysql·性能优化
shizhenshide14 小时前
为什么有时候 reCAPTCHA 通过率偏低,常见原因有哪些
开发语言·php·验证码·captcha·recaptcha·ezcaptcha
mit6.82414 小时前
[Agent可视化] 配置系统 | 实现AI模型切换 | 热重载机制 | fsnotify库(go)
开发语言·人工智能·golang