DarkCid
Messages postés195Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention26 octobre 2009
-
2 sept. 2008 à 11:16
Stanel
Messages postés6Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention16 décembre 2008
-
3 sept. 2008 à 19:35
Bonjour,
dans une fonction je reçois un prix min et un prix max. je dois vérifier que le prix min correspond à un certain pas. Par exemple, que le prix soit un multiple de 0.50. Juste vérifier, avec un modulo, ça j'y arrive. Seulement j'aimerais obtenir le prix supérieur au prix min multiple de 0.50 pour cet exemple et inférieur à mon prix max.
jreaux62
Messages postés195Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention24 octobre 201132 2 sept. 2008 à 17:08
Le -0.5 fait partie de la formule.
Explication :
round() arrondit à l'entier le plus proche :
- de xxx.00 à xxx.4999999... : l'entier inferieur (ex. : 23.48 --> 23)
- de xxx.50 à xxx.9999999... : l'entier superieur (ex. : 23.52 --> 24)
max(val1,val2) renvoie la plus grande des 2 valeurs.
En faisant max(round(blabla)-0.5, round(blabla)) :
on est sûr de récupérer l'entier directement supérieur
Donc dans ton cas :
multiplié par le pas, ca donne la premiere valeur superieure au PrixMin.
C'est bien ce que tu veux. (CQFD)
jreaux62
Messages postés195Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention24 octobre 201132 2 sept. 2008 à 11:43
C'est un probleme mathematique !
PrixMin - PrixMax : la fourchette de prix
Pas : le pas (ici 0.5)
PrixMinRond : celui que tu sais deja calculer
(le premier multiple du Pas superieur a PrixMin)
PrixMaxRond = le multiple du Pas directement inferieur a PrixMax,
il faut trouver X pour que :
PrixMinRond + X * Pas <= PrixMax
$Pas = 0.5;
$PrixMinRond = ...(ta formule pour le calculer);
$PrixMaxRond = $PrixMinRond;
$x = 0;
while (($PrixMinRond + $x * $Pas) <= $PrixMax) {
$PrixMaxRond += $Pas;
$x++;
}
DarkCid
Messages postés195Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention26 octobre 20091 2 sept. 2008 à 11:49
Sauf que c'est justement le PrixMinRond que j'arrive pas à trouver. Moi je sait juste avec un modulo si le prix passé en paramètre est bon ou pas.
En fait, dans ma fonction je dois faire une boucle afin d'obtenir tous les prix entre le min et le max multiples du pas. Du coup, comme je fais un for, je n'ai pas besoin de calculer le max, mais il me faut quand même mon point de départ.
j'ai donc ça :
for($i=$min;$i<=$max;$i+=$pas){
// mon traitement pour chaque prix
}
$PrixRond = $PrixMinRond;
while($PrixRond<=$PrixMax){
// traitement pour chaque prix
// ...................
// incrementation du prix
$PrixRond += $Pas;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
jreaux62
Messages postés195Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention24 octobre 201132 2 sept. 2008 à 19:26
CORRECTION !
la formule fausse ! (problème si PrixMin est un entier !) round() est très pénible à basculer entre entier inférieur et entier supérieur !
(je me suis emmêlé les pinceaux ...)
Voila la formule qui fonctionne (testée) :
// ------------------
if (($Pas * round($PrixMin/$Pas))>= $PrixMin) {
$PrixMinRond = ($Pas * round($PrixMin/$Pas));
} else {
$PrixMinRond = ($Pas * round($PrixMin/$Pas))+$Pas;
}
// ------------------