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

DarkCid
|
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
|
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|