.net工具类 分享一个简单的随机分红包的实现方式
程序员文章站
2022-05-25 16:58:21
废话不多说,直接上代码 下面写个demo测试一下。 上面的案例是一个200块钱的红包分10份,打印结果如下 这种分红包的方式有一个缺陷,就是 红包的金额 <= 剩下的金额 / 剩下的次数 大家有没有更好的分红包方式呢 ......
废话不多说,直接上代码
/// <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份,打印结果如下
这种分红包的方式有一个缺陷,就是 红包的金额 <= 剩下的金额 / 剩下的次数
大家有没有更好的分红包方式呢