.net工具类 分享一个简单的随机分红包的实现方式
废话不多说,直接上代码
/// <summary> /// 分红包 /// </summary> public class RandomMoney { public RandomMoney(double totalMoney, int totalCount) { RemainMoney = totalMoney; RemainCount = totalCount; } /// <summary> /// 剩下的金额 /// </summary> private double RemainMoney { get; set; } /// <summary> /// 剩下的次数 /// </summary> private double RemainCount { get; set; } private Random r = new Random(); /// <summary> /// 获取当次红包的金额 /// </summary> /// <returns></returns> public double GetRandomMoney() { if (RemainCount < 1) throw new Exception("红包已经抢完了"); if (RemainCount == 1)//最后一次 { RemainCount--; return (double)Math.Round(RemainMoney * 100) / 100; } double min = 0.01; double max = RemainMoney / RemainCount * 2; double money = r.NextDouble() * max;//随机收取本次金额 money = money <= min ? 0.01 : money;//判断最小值 money = Math.Floor(money * 100) / 100; RemainCount--;//红包个数递减 RemainMoney = RemainMoney - money;//计算剩余金额 return money;//返回本次领取金额 } }
下面写个demo测试一下。
class Program { static void Main(string[] args) { double totalMoney = 200; int totalCount = 10; RandomMoney random = new RandomMoney(totalMoney, totalCount); for (int i = 0; i < totalCount; i++) { Console.WriteLine($"第{i + 1}个红包:{random.GetRandomMoney()}元"); } Console.ReadKey(); } }
上面的案例是一个200块钱的红包分10份,打印结果如下
这种分红包的方式有一个缺陷,就是 红包的金额 <= 剩下的金额 / 剩下的次数
大家有没有更好的分红包方式呢