<?php
class RedEnvelopes
{
public $remainSize = 20; //份数
public $remainMoney = '10.00'; // 总额
public $min = '0.01';//最小
public $scale = 2;//倍数
public function getRandomMoney()
{
//判断份数不小于0 或者 于0比较
if ($this->remainSize <= 0 || bccomp($this->remainMoney, "0") < 1) {
return "0.00";
}
//设置小数
bcscale($this->scale);
//判断是否最后一份
if ($this->remainSize == 1) {
$this->remainSize = 0;
return $this->remainMoney;
}
// 核心算法 start
//二倍均值法
//金额除以份数乘以2
$max = bcmul(bcdiv($this->remainMoney, strval($this->remainSize)), "2");
//在0.01和1中间随机取一个值乘以称最大值
$money = bcmul(rand(0, 100) / 100, $max);
// 核心算法 end
//判断在获取到的金额和最小金额对比
if (bccomp($money, $this->min) < 1) {
$money &
php实现抢红包 使用二倍均值法
最新推荐文章于 2023-09-06 23:33:29 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)