Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des in PHP implementierten Algorithmus zur Aufteilung des Betrags des roten Umschlags

Detaillierte Erläuterung des in PHP implementierten Algorithmus zur Aufteilung des Betrags des roten Umschlags

php中世界最好的语言
php中世界最好的语言Original
2018-05-17 10:51:031983Durchsuche

Dieses Mal werde ich Ihnen den Fall der PHP-Implementierung des Red-Envelope-Betragsaufteilungsalgorithmus näher erläutern Ein praktischer Fall, werfen wir einen Blick darauf.

<?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();
?>
Demo-Ergebnisse:

Rotes Paket 1=12,36
Rotes Paket 2=24,37

Rotes Paket 3=42,71
Rotes Paket 4=36,92
Rotes Paket 5= 25,84
Roter Umschlag 6=23,17
Roter Umschlag 7=15,92
Roter Umschlag 8=1,35
Roter Umschlag 9=7,75
Roter Umschlag 10=9,61
Gesamt Menge des roten Umschlags: 200

Roter Umschlag 1=24,59
Roter Umschlag 2=17,66
Roter Umschlag 3=29,67
Roter Umschlag 4=32,34
Roter Umschlag 5=12,67
Roter Umschlag 6=37,15
Roter Umschlag 7=17,41
Roter Umschlag 8=15,23
Roter Umschlag 9=6,13
Roter Umschlag 10=7,15
Gesamtbetrag des roten Umschlags: 200

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Bitte achten Sie auf weitere spannende Artikel auf der chinesischen PHP-Website.

Empfohlene Lektüre:

Detaillierte Erläuterung des PHP-Abhängigkeitsinversionsfalls


Detaillierte Erläuterung der Schritte, mit denen PHP eine Datei erhält MIME-Typen

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des in PHP implementierten Algorithmus zur Aufteilung des Betrags des roten Umschlags. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn