This time I will bring you a detailed explanation of the case of PHP's implementation of the red envelope amount splitting algorithm. What are the precautions for PHP's implementation of the red envelope amount splitting algorithm. The following is a practical case, let's take a look.
<?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(); ?>
Demo results:
红包1=12.36
红包2=24.37
红包3=42.71
红包4=36.92
红包5= 25.84
Red envelope 6=23.17
Red envelope 7=15.92
Red envelope 8=1.35
Red envelope 9=7.75
Red envelope 10=9.61
Total amount of red envelope: 200
Red envelope 1=24.59
Red envelope 2=17.66
Red envelope 3=29.67
Red envelope 4=32.34
Red envelope 5=12.67
Red envelope 6=37.15
Red envelope 7=17.41
Red envelope 8=15.23
Red envelope 9=6.13
Red envelope 10=7.15
Total red envelope amount: 200
I believe you have mastered the method after reading the case in this article. Please pay attention for more exciting things. Other related articles on php Chinese website!
Recommended reading:
Detailed explanation of PHP dependency inversion case
Detailed explanation of the steps for PHP to obtain file mime types
The above is the detailed content of Detailed explanation of the case of red envelope amount splitting algorithm implemented in PHP. For more information, please follow other related articles on the PHP Chinese website!