自己封装的红包算法
因为公众号小程序提现最小1元,所以最小值设置为了1
还请大家提出建议
//随机发放红包(最小一元) #region 发红包 /// <summary> /// 发红包 /// </summary> /// <param name="RedBagType">红包类型</param> /// <param name="RemainingRedBag">剩余红包金额</param> /// <param name="RemainingRedBagNumber">剩余红包数量</param> /// <returns></returns> public static decimal GiveRedBag(EnumRedBagType RedBagType, decimal RemainingRedBag, decimal RemainingNumber) { switch (RedBagType) { case EnumRedBagType.随机: return getRandomMoney(RemainingRedBag, RemainingNumber); case EnumRedBagType.平均: return getOrdinaryMoney(RemainingRedBag, RemainingNumber); default: return 0; } } #endregion
#region 随机红包 /// <summary> /// 随机红包 /// </summary> /// <param name="RemainingRedBag">红包金额</param> /// <param name="RemainingNumber">红包数量</param> /// <returns></returns> public static decimal getRandomMoney(decimal RemainingRedBag, decimal RemainingNumber) { RemainingNumber--; if (RemainingRedBag < 1) { return 0; } if (RemainingNumber == 0) { return Math.Round(RemainingRedBag * 100) / 100; } var Min = 1;//最小红包 var Max = RemainingRedBag - RemainingNumber;///最大红包 var MinRandom = Convert.ToInt32((1 / Max) * 100);///最小随机数 var Multiple = new Random().Next(MinRandom, 100);///随机倍数 decimal RedBagMultiple = Math.Round((Multiple / 100M) * 100) / 100;///红包随机倍数 var RedBag = Math.Round(Max * RedBagMultiple * 100) / 100;//红包保留两位小数 RedBag = RedBag < Min ? Min : RedBag;//红包最小金额验证 RedBag = RedBag > Max ? Max : RedBag;//红包最大金额验证 return RedBag; } #endregion
#region 普通红包 public static decimal getOrdinaryMoney(decimal RemainingRedBag, decimal RemainingNumber) { if (RemainingRedBag < 1) { return 0; } if (RemainingNumber == 1) { return RemainingRedBag; } var RedBag = Math.Round((RemainingRedBag / RemainingNumber) * 100) / 100; return RedBag; } #endregion ///范围红包 /// <summary> /// 随机红包 /// </summary> /// <param name="MinRedBag">最小红包</param> /// <param name="MaxRedBag">最大红包</param> /// <returns></returns> private static decimal getRandomMoney(decimal MinRedBag, decimal MaxRedBag) { if (MinRedBag < 0) { return 0; } if (MaxRedBag < MinRedBag) { return 0; } var Min = MinRedBag;//最小红包 var Max = MaxRedBag;///最大红包 var Multiple= new Random().Next(1, 100);///随机倍数 decimal RedBagMultiple = Math.Round((Multiple / 100M) * 100) / 100;///红包随机倍数 var RedBag = Math.Round(Max * RedBagMultiple * 100) / 100;//红包保留两位小数 RedBag = RedBag < Min ? Min : RedBag;//红包最小金额验证 RedBag = RedBag > Max ? Max : RedBag;//红包最大金额验证 return RedBag; }
|