<meta charset="utf-8">
<?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

最新文章

  1. DataTable的orderby有关问题
  2. 页面测试点testpoint
  3. linux线程的实现
  4. 为 mysql 数据表添加主键
  5. 如何退出Flex手机项目?
  6. suse linux环境变量设置
  7. 解决UIScrollView 的点击事件
  8. liunx 平台下软件包管理
  9. 【Android】TextView文字长度测量和各种Paddding解析
  10. NodeJS+Express+MongoDB 简单实现数据录入及回显展示【适合新人刚接触学习】
  11. 【简单理解】gulp和webpack的区别
  12. 案例:8,64,256都是2的阶次方数(8是2的3次方),用Java编写程序来判断一个整数是不是2的阶次方数。
  13. vba遗传算法之非一致性突变
  14. DevExpress v17.2新版亮点—WPF篇(二)
  15. Spring IOC 源码简单分析 01 - BeanFactory
  16. js 屏蔽浏览器事件汇总
  17. LeetCode 中级 - 救生艇(105)
  18. vertex buffer 数据结构 如何读vb的memory pool
  19. (转)CentOS 7系统详细开机启动流程和关机流程
  20. STM32F407VG (四)时钟配置

热门文章

  1. [办公自动化]如何对Excel表格顶部设计
  2. Javascript 判断一个数字是否含有小数点
  3. SVN客户端常用命令
  4. Linux Nginx 安装配置
  5. 专家来了-提测-改bug-上线10号
  6. = splice
  7. 【转】Unity3D研究院之通过C#使用Advanced CSharp Messenger(五十)
  8. 【转】Laravel+Angularjs+D3打造可视化数据,RESTful+Ajax
  9. Java中instanceof用法
  10. angularJS的$watch和$apply