Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Faire un arrondi par rapport à un pas [ Divers / Général ] (DarkCid)

mardi 2 septembre 2008 à 11:16:44 | Faire un arrondi par rapport à un pas

DarkCid

Membre Club
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.

Une idée

Espérer le meilleur
Prévoir le pire

mardi 2 septembre 2008 à 11:43:16 | Re : Faire un arrondi par rapport à un pas

jreaux62

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++;
}

mardi 2 septembre 2008 à 11:49:53 | Re : Faire un arrondi par rapport à un pas

DarkCid

Membre Club
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
}

mais il me faut donc un $min qui aille


Espérer le meilleur
Prévoir le pire

mardi 2 septembre 2008 à 14:32:03 | Re : Faire un arrondi par rapport à un pas

jreaux62

$PrixMinRond = $Pas * max(round(($PrixMin/$Pas)-0.5),round($PrixMin/$Pas));

$PrixRond = $PrixMinRond;
while($PrixRond<=$PrixMax){
      // traitement pour chaque prix
      // ...................
      // incrementation du prix
      $PrixRond += $Pas;
}

mardi 2 septembre 2008 à 14:36:19 | Re : Faire un arrondi par rapport à un pas

jreaux62

Ou si tu preferes :

$min = $Pas * max(round(($PrixMin/$Pas)-0.5),round($PrixMin/$Pas));

for($i=$min; $i<=$max; $i+=$pas){
      // traitement pour chaque prix $i
      // ......................
}

mardi 2 septembre 2008 à 14:36:46 | Re : Faire un arrondi par rapport à un pas

DarkCid

Membre Club
Le -0.5 dans le premier round, c'est le pas ou sa fait partie de la formule ?

Espérer le meilleur
Prévoir le pire

mardi 2 septembre 2008 à 17:08:48 | Re : Faire un arrondi par rapport à un pas

jreaux62

Réponse acceptée !
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)

mardi 2 septembre 2008 à 17:13:34 | Re : Faire un arrondi par rapport à un pas

DarkCid

Membre Club
Cool merci

Espérer le meilleur
Prévoir le pire

mardi 2 septembre 2008 à 19:26:31 | Re : Faire un arrondi par rapport à un pas

jreaux62

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;
}

// ------------------





mercredi 3 septembre 2008 à 19:35:57 | Re : Faire un arrondi par rapport à un pas

Stanel

Pour 2 decimals:
-----------------

$pas=intval(100*$pas);
$prix_min=intval(100*$prix_min);
$prix=(intval(($prix_min+$pas-0.1)/$pas)*$pas)*1e-2;


Pour 0 decimals (entiers):
--------------------------

$prix=intval($prix_min+$pas-0.1)/$pas)*$pas;



Cette discussion est classé dans : rapport, arrondi, max, prix, min


Répondre à ce message

Sujets en rapport avec ce message

associer un champs [ par frottman1976 ] Bonjour à tous,Ceci est mon premier post sur ce site donc en m'en voulez si je formule mal ma question.J'utilise Mysqlserver 5.0.22.J'ai une table qui Preg_replace déconne ?! [ par zen69 ] Salut tout le monde,J'ai un petit probleme avec un preg_replace, qui me donne de drole de résultats.Voici ce que j'utilise:  $paterns = array('%min%', liste deroulante [ par catifeli ] Bonjours,   je viens de commencer à apprendre le php et j'ai un petit souci! j'ai un formulaire ou j'ai envie d'avoir deux liste deroulante qui son re probleme syntaxe ecriteu BDD [ par ju0123456789 ] Bonjour, j'ai les produits du panier qui s'affichent sur ma page "modes_paiement.php" , le nombre d'articles et ainsi que le prix total, j'ai ma table trouver la position d'un score par rapport à une liste de scores [ par arne6 ] bonjour j'ai une BDD 'joueurs' avec pour chaque entrée un champs 'ID', 'nom' et 'score' j'aimerai retrouver la position du joueur dans la liste par Afficher des données en rapport avec un choix dans une liste deroulante. [ par meego ] Bonjour ,j'ai une liste déroulante qui contient des valeurs issues d'un base Mysql.Ce que j aimerais c'est que par rapport a une des valeurs que je va help pour calcul prix degressif en php [ par pocalypse ] bonsoir a tous et toutes.j'ai un petit probleme.voila je voudrais integrer à mon calcul un tarif degressif en fonction de la quantité.donc le calcul d recuperer la valeur d un select qui modifie une image et un prix a partir d une base de donnee [ par elementdefeu ] bon alors je ne sais pas trop déjà ou poster ma question alors je me lance ici...voilà je suis débutante dans tout ce qui est sites et j'aurais aimé u caddie électronique [ par mannou83 ] salut ça fait une semaine que je travaille sur ça et j'arrive a rien j'espère qu'on pourra m'aider sur ce forum affichage d'un prix total [ par michelo34 ] // script pas complet juste //partit du code qui me pose probleme$reponse = mysql_query("SELECT * FROM matable where acheteur='$pseudo_membre'");// ma


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.