红包拆分算法 php,关于PHP实现微信红包金额拆分的算法

本篇文章主要介绍了PHP实现微信红包金额拆分试玩的算法示例,内容挺不错的,现在分享给大家,也给大家做个参考。

本文介绍了PHP实现微信红包金额拆分试玩的算法示例,分享给大家,有兴趣的可以看一下:

?php// 新年红包金额拆分试玩html' target='_blank'>class CBonus public $bonus;//红包 public $bonus_num;//红包个数 public $bonus_money;//红包总金额 public $money_single_max;//单个红包限额 public function __construct(){ $this- bonus_num = 10; $this- bonus_money = 200; $this- money_single_max = 60; private function randomFloat($min = 0, $max = 1) { $mt_rand = mt_rand(); $mt_getrandmax = mt_getrandmax(); echo mt_rand= . $mt_rand . , mt_getrandmax= . $mt_getrandmax . hr/ return $min + $mt_rand / $mt_getrandmax * ($max - $min); //计算 public function compute() $this- bonus = array(); $bonus_money_temp = $this- bonus_money; $money_single_max = $this- money_single_max; $i = 1; while($i $this- bonus_num) if ($money_single_max $bonus_money_temp) $money_single_max = floatval(sprintf( %01.2f , $bonus_money_temp / 2));//剩余金额不够分时,把剩余金额的一半作为备用金 $bonus_money_rad = $this- randomFloat(0.01, $money_single_max);//一个红包随机金额 最小的1分钱 $bonus_money_rad = floatval(sprintf( %01.2f , $bonus_money_rad)); $bonus_money_temp = $bonus_money_temp - $bonus_money_rad ;//待分配的总剩余金额 $bonus_money_temp = floatval(sprintf( %01.2f , $bonus_money_temp)); $this- bonus[] = $bonus_money_rad; //echo $bonus_money_rad . , . $bonus_money_temp . hr/ $i++; $this- bonus[] = $bonus_money_temp;//分配剩余金额给最后一个红包 //打印 public function output(){ $total = 0; foreach($this- bonus as $k = $v) echo 红包 . ($k+1) . = . $v . br/ $total += $v; echo 红包总金额: .$total;$CBonus = new CBonus();$CBonus- compute();$CBonus- output();?

演示结果:

红包1=12.36

红包2=24.37

红包3=42.71

红包4=36.92

红包5=25.84

红包6=23.17

红包7=15.92

红包8=1.35

红包9=7.75

红包10=9.61

红包总金额:200

红包1=24.59

红包2=17.66

红包3=29.67

红包4=32.34

红包5=12.67

红包6=37.15

红包7=17.41

红包8=15.23

红包9=6.13

红包10=7.15

红包总金额:200

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP !

相关推荐:

如何使用php实现快钱支付的功能

以上就是关于PHP实现微信红包金额拆分的算法的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java实现微信拼手气红包算法的代码: ```java import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Random; public class RedPacketUtil { /** * 拆分红包 * * @param totalAmount 红包金额(单位:元) * @param totalPeople 红包总人数 * @return 拆分后的红包金额列表 */ public static List<BigDecimal> splitRedPacket(BigDecimal totalAmount, int totalPeople) { List<BigDecimal> amountList = new ArrayList<>(); Random random = new Random(); BigDecimal leftAmount = totalAmount; int leftPeople = totalPeople; for (int i = 0; i < totalPeople - 1; i++) { // 随机生成一个红包金额,范围为:0.01元 ~ 剩余平均值的两倍 BigDecimal amount = BigDecimal.valueOf(random.nextDouble()) .multiply(leftAmount.divide(BigDecimal.valueOf(leftPeople), 2, BigDecimal.ROUND_HALF_UP)) .multiply(BigDecimal.valueOf(2)) .setScale(2, BigDecimal.ROUND_HALF_UP); amountList.add(amount); leftAmount = leftAmount.subtract(amount); leftPeople--; } amountList.add(leftAmount); return amountList; } /** * 计算红包金额 * * @param amountList 红包金额列表 * @return 红包金额(单位:元) */ public static BigDecimal getTotalAmount(List<BigDecimal> amountList) { BigDecimal totalAmount = BigDecimal.ZERO; for (BigDecimal amount : amountList) { totalAmount = totalAmount.add(amount); } return totalAmount; } public static void main(String[] args) { BigDecimal totalAmount = BigDecimal.valueOf(10); // 红包金额为10元 int totalPeople = 5; // 拆分红包的总人数为5人 List<BigDecimal> amountList = splitRedPacket(totalAmount, totalPeople); System.out.println(amountList); } } ``` 使用示例: ```java BigDecimal totalAmount = BigDecimal.valueOf(10); // 红包金额为10元 int totalPeople = 5; // 拆分红包的总人数为5人 List<BigDecimal> amountList = RedPacketUtil.splitRedPacket(totalAmount, totalPeople); // 拆分红包 BigDecimal total = RedPacketUtil.getTotalAmount(amountList); // 计算红包金额 ``` 实现思路: 1. 先定义一个红包金额拆分红包的总人数; 2. 初始化一个空的红包金额列表和一个Random对象; 3. 循环拆分红包,每次生成一个随机金额,范围为:0.01元 ~ 剩余平均值的两倍; 4. 将生成的红包金额添加到列表中,并更新剩余金额和剩余人数; 5. 最后将剩余金额作为最后一个红包金额添加到列表中; 6. 计算红包金额,返回红包金额列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值