Maison  >  Article  >  développement back-end  >  À propos de l'algorithme de fractionnement du nombre d'enveloppes rouges WeChat en PHP

À propos de l'algorithme de fractionnement du nombre d'enveloppes rouges WeChat en PHP

不言
不言original
2018-06-19 15:46:262946parcourir

Cet article présente principalement l'exemple d'algorithme d'utilisation de PHP pour implémenter l'essai de fractionnement du montant de l'enveloppe rouge WeChat. Le contenu est assez bon. Je vais le partager avec vous maintenant et le donner comme référence.

Cet article présente un exemple de l'algorithme de fractionnement du montant de l'enveloppe rouge WeChat en PHP. J'aimerais le partager avec vous. Si vous êtes intéressé, vous pouvez y jeter un œil :

.

<?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
Rouge Paquet 3=42,71
Rouge Paquet 4=36,92
Enveloppe 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

Enveloppe rouge 1=24,59
Enveloppe rouge 2=17,66
Enveloppe rouge 3=29,67
Enveloppe rouge 4=32,34
Enveloppe rouge 5=12,67
Enveloppe rouge 6=37,15
Enveloppe 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

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun. Pour obtenir de l'aide, veuillez faire attention au chinois PHP site Web pour plus de contenu connexe !

Recommandations associées :

Comment utiliser PHP pour implémenter la fonction de paiement rapide

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