php实现抢红包 使用二倍均值法

<?phpclass RedEnvelopes{ public $remainSize = 20; //份数 public $remainMoney = '10.00'; // 总额 public $min = '0.01';//最小 public $scale = 2;//倍数 public function getRandomMoney() { //判断份数不小于0 或者 于0比较 if ($this-&.
摘要由CSDN通过智能技术生成
<?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 &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值