红包实现方法

/**
 * 随机红包
 *
 * @param int $n 红包数
 * @param float $totalMoney 总钱数
 * @return array
 */
function hongBao($n, $totalMoney)
{
    if ($n > 100) {
        return '红包数大于100!';
    }
    $result = array();
    if ($n == 1) {
        array_push($result, number_format($totalMoney, 2));
    } else {
        //后缀小数位
        $suffixNumber = $totalMoney / $n < 0.1 ? 3 : 2;
        for ($i = 1; $i <= $n; $i++) {
            //随机系数
            $coefficient = lcg_value() + lcg_value();
            //最大系数
            $coefficient = $coefficient >= 1.70 ? 1.25 : $coefficient;
            //最后一次
            if ($i == $n) {
                //防止溢出
                if (array_sum($result) > $totalMoney) {
                    return hongBao($n, $totalMoney);
                    break;
                }
                $data = $totalMoney - array_sum($result);
            } else {
                $data = $coefficient * ($totalMoney / $n);
            }
            //防止等于0
            if (in_array(number_format($data, $suffixNumber), array(0.00, 0.000))) {
                $data += 0.01;
            }
            array_push($result, number_format($data, $suffixNumber));
        }
    }
    return $result;
}

转载于:https://my.oschina.net/wangyandong/blog/549174

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值