Maison  >  Article  >  développement back-end  >  Explication détaillée du cas de l'algorithme de fractionnement du montant de l'enveloppe rouge implémenté en PHP

Explication détaillée du cas de l'algorithme de fractionnement du montant de l'enveloppe rouge implémenté en PHP

php中世界最好的语言
php中世界最好的语言original
2018-05-17 10:51:031976parcourir

Cette fois, je vais vous apporter une explication détaillée du cas d'implémentation par PHP de l'algorithme de fractionnement du montant de l'enveloppe rouge. Quelles sont les précautions pour la mise en œuvre par PHP de l'algorithme de fractionnement du montant de l'enveloppe rouge. cas pratique, jetons un coup d'oeil.

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

Résultats de la démonstration :

Paquet rouge 1=12,36
Paquet rouge 2=24,37
Paquet rouge 3=42,71
Paquet rouge 4=36,92
Paquet rouge 5=25,84
Enveloppe rouge 6=23,17
Enveloppe rouge 7=15,92
Enveloppe rouge 8=1,35
Enveloppe rouge 9=7,75
Enveloppe rouge 10=9,61
Montant total de l'enveloppe rouge : 200

Paquet rouge 1=24,59
Paquet rouge 2=17,66
Paquet rouge 3=29,67
Paquet rouge 4=32,34
Paquet rouge 5= 12,67
Paquet rouge 6=37,15
Paquet rouge 7=17,41
Enveloppe rouge 8=15,23
Enveloppe rouge 9=6,13
Enveloppe rouge 10=7,15
Montant total de l'enveloppe rouge : 200

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article, plus excitant. Veuillez faire attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée du cas d'inversion de dépendance PHP

Explication détaillée des étapes permettant à PHP d'obtenir le fichier types mime

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn