2017-10-11 14 views
1

Je ne sais pas comment mettre cela en mots, mais je vais essayer de mon mieux. J'ai donc un numéro. $number = 201 par exemple. Ce nombre arrondit jusqu'à la centaine suivante. Donc 300, par exemple. Je veux montrer ma barre de progression pour montrer 201/300. Ou si $ number = 23, je veux que la barre de progression affiche 23 sur 100. Ou $ number = 506, affiche 506/600.PHP augmenter la barre de pourcentage

Donc maintenant, je comprends que la barre de progression bootstrap s'exécute en pourcentage. Donc 100%. Donc, tout va bien, jusqu'à ce que $ number dépasse 100. Parce que ça ne marche pas où $ number = 100 sur 200, parce que 100 apparaîtraient comme 100%.

Je suis assez sûr de ce dont j'ai besoin, c'est un peu de maths, mais pour l'instant, je ne peux pas penser à la façon de le faire.

<div class="progress" style="margin-bottom:0px"> 
    <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="2" aria-valuemin="0" aria-valuemax="100" style="min-width: 2em; width: <?php echo $number; ?>%;"> 
    <?php echo $number; ?> 
    </div> 
</div> 

Merci

Edit: Ce n'est pas un double de comment arrondir au plus proche 10. Cela a déjà été fait. en utilisant le plafond (nombre en $/100) * 100; Cette question porte sur la façon de faire en sorte que la barre de pourcentage affiche quelque chose comme 450 sur 500

+0

450/500 * 100 vous donnera la même chose sur 100. Y at-il un problème avec cela? – tan

+0

Avez-vous essayé de définir la propriété aria-valuemax à votre valeur maximale? –

+0

@tan dans ce scénario, je veux 400 à montrer comme 0, 450 à montrer comme 50% et 500 montrant à 100% –

Répondre

2

C'est en fait assez simple: vous voulez arrondir la valeur à 100 près, et cela peut être fait en utilisant ceil($number/100) * 100. Une fois que vous avez obtenu le niveau "max", vous pouvez calculer le ratio:

<?php 
    // Get the next closest 100 
    $nextHundred = ceil($number/100) * 100; 

    // Calculate ratio against nextHundred 
    $ratio = $number/$nextHundred * 100; 
?> 

Avec cette logique, vous obtiendrez:

  • 23% 23, parce qu'il est évalué à l'aide 23÷100
  • 90% pour 450, car il est évalué à l'aide 450÷500

Cependant, si vous voulez 450 pour vous donner 50% (parce que vous voulez l'évaluer comme (450-400)÷(500-400)), vous demandez essentiellement pour le module de 100:

// Calculate modulus 
$ratio = $number % 100; 

Dans les deux cas, vous pouvez utiliser $ratio en place de $number dans votre logique. N'oubliez pas que vous devez également mettre à jour le aria-valuenow pour des raisons d'accessibilité. Pour afficher le ratio dans votre barre de progression, au lieu d'utiliser $ratio, vous écrivez simplement $number.'/'.$nextHundred.

<div class="progress" style="margin-bottom:0px"> 
    <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="<?php echo $ratio; ?>" aria-valuemin="0" aria-valuemax="100" style="min-width: 2em; width: <?php echo $ratio; ?>%;"> 
    <?php echo $number.'/'.$nextHundred; ?> 
    </div> 
</div> 
+0

Merci, votre deuxième exemple a bien fonctionné. Avec $ nextHundred, à 500 ça en montre 500. Est-ce que je peux en quelque sorte en faire 600? Comme 501 montrera 600, est-ce que je peux en avoir 500 aussi? –

0

C'est en fait encore plus simple en utilisant les mathématiques de base. La valeur int/float reçue divisée par la valeur max du pourcentage int/float, puis multipliée par 100.

E.g. 50 200 et 35 400

50/200 * 100 = 25. (25%) 
35/400 * 100 = 8.75 (8.75%) 

Donc il suffit d'utiliser:

$percentage = (($number/$max) * 100) 

Ensuite, si vous souhaitez afficher cette via la chaîne, à utiliser seulement $ nombre et $ max pour votre « x sur y "barre de pourcentage.