begin process at 2012 02 15 09:23:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Faire un arrondi par rapport à un pas


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Faire un arrondi par rapport à un pas

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ée 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 requete SQL genere Page Web inaccessible [ par morbak01 ] Bonjour, J'ai une table MySQL qui fait 510 000 lignes avec 19 champs qui représente des log de chaques jours sur une année ttes les minutes. pour chaq Requete SQL >120secondes [ par morbak01 ] Bonjour, Bonjour, J'ai une table MySQL qui fait 510 000 lignes avec 19 champs qui représente des log de chaques jours sur une année ttes les minutes 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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales