zoukankan      html  css  js  c++  java
  • 发红包随机金额的两种方式

    总结下微信红包随机函数

    1   固定面额      即 输入金额生成已知的固定金额

    //total  红包总金额   
     protected function randCoupon($total=30){
            $denomination = array(10,5,3,2,1);//固定面额
            $arr = array();
            while ($total){
                if(count($denomination)>0){
                    $index = rand(0,count($denomination)-1);//随机抽取一个固定面额索引
                    $money = $denomination[$index];
                    if($money>$total) continue;
                    array_push($arr,$money);
                    $total = (int)$total - (int)$money;
                    if($total==1){
                        array_push($arr,$total);
                        break;
                    }
                    if($total<1) break;
                    foreach ($denomination as $k => $item){
                        if($total <= $item){
                            array_splice($denomination,$k,1);
                        }
                    }
                }
    
            }
            shuffle($arr);//重新打乱数组
            return $arr;
        }

    2   随机金额    即输入金额及红包个数   然后生成一个随机数组

       //拆分数值生成若干个和等于该数值随机值
        public function randNum($total=200,$num=17) {
            $min=0.01;//每个人最少能收到0.01元
            for ($i=1;$i<$num;$i++) {
                $safe_total = ($total - ($num-$i)*$min) / ($num-$i);//随机安全上限
                if($safe_total < 0.01) $safe_total = 0.01;
                $money = mt_rand($min*100,$safe_total*100)/100;
                $total = $total - $money;
                $data[] = round($money,2);
            }
            $data[] = round($total,2);
            shuffle($data);
            return $data;
        }
  • 相关阅读:
    Canny边缘检测高低阈值问题
    EffectiveC++ Item25测试
    下载videolectures.net里的视频的方法
    01章 象数易理篇之一
    论文格式问题
    反序列化笔记
    什么是动爻
    EffectiveC++ Item25说的东东
    优化功能
    论文修改意见
  • 原文地址:https://www.cnblogs.com/xiaofei723/p/14924037.html
Copyright © 2011-2022 走看看