Home > Backend Development > PHP Tutorial > Detailed explanation of the case of red envelope amount splitting algorithm implemented in PHP

Detailed explanation of the case of red envelope amount splitting algorithm implemented in PHP

php中世界最好的语言
Release: 2023-03-26 08:46:02
Original
2017 people have browsed it

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 &#39;mt_rand=&#39; . $mt_rand . &#39;, mt_getrandmax=&#39; . $mt_getrandmax . &#39;<hr/>&#39;;
    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 . &#39;,&#39; . $bonus_money_temp . &#39;<hr/>&#39;;
      $i++;
    }
    $this->bonus[] = $bonus_money_temp;//分配剩余金额给最后一个红包
  }
  //打印
  public function output(){
    $total = 0;
    foreach($this->bonus as $k => $v)
    {
      echo &#39;红包&#39; . ($k+1) . &#39;=&#39; . $v . &#39;<br/>&#39;;
      $total += $v;
    }
    echo &#39;红包总金额:&#39;.$total;
  }
}
$CBonus = new CBonus();
$CBonus->compute();
$CBonus->output();
?>
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template