PHP实现微信红包金额拆分试玩的算法示例


Posted in PHP onApril 07, 2018

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

<?php
// 新年红包金额拆分试玩

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配置文件中最常用四个ini函数
Mar 19 PHP
MySql 按时间段查询数据方法(实例说明)
Nov 02 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
php数据库配置文件一般做法分享
Jul 07 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
smarty简单入门实例
Nov 28 PHP
PHP执行SQL文件并将SQL文件导入到数据库
Sep 17 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 #PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 #PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 #PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 #PHP
PHP设计模式之工厂模式定义与用法详解
Apr 03 #PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 #PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 #PHP
You might like
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
php浏览历史记录的方法
2015/03/10 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
python 七种邮件内容发送方法实例
2014/04/22 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
【python】matplotlib动态显示详解
2019/04/11 Python
Python实现把类当做字典来访问
2019/12/16 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
python微信公众号开发简单流程实现
2020/03/09 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
Python 日期与时间转换的方法
2020/08/01 Python
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
法制宣传月活动总结
2014/04/29 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
庆七一宣传标语
2014/10/08 职场文书
优秀教师单行材料
2014/12/16 职场文书
银行员工考核评语
2014/12/31 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫