COMMENT ARRONDIR UN NOMBRE VERS LE HAUT --> DEUX OPTIONS !

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 17 sept. 2003 à 23:46
teststes Messages postés 4 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 8 janvier 2007 - 7 août 2008 à 01:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/8561-comment-arrondir-un-nombre-vers-le-haut-deux-options

teststes Messages postés 4 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 8 janvier 2007
7 août 2008 à 01:48
merci
cs_MSergio Messages postés 21 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 26 juin 2007
11 juin 2007 à 09:19
Merci,

C'est vraiment sympa d'y avoir pensé pour microsoft...
manymal Messages postés 66 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 20 avril 2006
20 avril 2006 à 14:39
Youpiii...
roundUp = -Int(-(myNum))
c'est les "-" qui me manquai !!!!
MERCI
pavid Messages postés 5 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 27 octobre 2005
29 déc. 2004 à 15:46
Clair, précis, efficace, Bravo
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 nov. 2004 à 13:11
évitez de recalculer 25.000 fois les mêmes choses :

Iif(int(n/v) = n/v, n/v, Int(n/v) + 1)

donnera

B = n\v
A = n/v
Iif(B = A, A, B + 1)


un moyen d'arrondir a .5 pret ( 2.28 : 2 et 2.64 : 3)
est :
A = N mod 5
cs_NoFutur Messages postés 171 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 6 mai 2007 1
14 nov. 2004 à 19:36
Mine de rien ce chti bout de code m'a rendu un grand service 10/10 :-)

Bonne prog !!!
@plus
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
25 oct. 2004 à 17:11
Ou encore, peut-être veux-tu arrondir vers le heut au centième près ? Alors tu dois appliquer cette formule :


-int(-((10.1234*100)))/100 = 10.13


Bonne journée,


MadLucas
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
23 oct. 2004 à 00:48
Bonjour Frank339,


Si tu veux ajouter les centièmes sur le résultat, et bien l'objectif ici est d'arrondir un nombre vers le haut. Un nombre arrondi est forcément entier, donc pas de fractions. <!!>

Maintenant, si tu veux arrondir un nombre qui possède des centièmes, alors pas besoin de se casser la tête car cette solution le fait déjà.

Par exemple:

-int(-(10,25)) = 11


C'est bien ce que tu voulais dires ?



MadLucas
Frank339 Messages postés 164 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 19 décembre 2008
22 oct. 2004 à 22:52
petite question...
comment je fais pour ajouter deux chiffres après la virgule sur la source de madlucas ???
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
13 nov. 2003 à 16:32
Tout le plaisir est pour moi !! Merci à vous tous pour ces bons commentaires.



MadLucas.
lareve Messages postés 2 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 13 novembre 2003
13 nov. 2003 à 15:04
merci pour ce bout de code qui est très pratique, encore merci, tu m'a s fait gagner beucoup de temps.

lareve!
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
23 sept. 2003 à 15:04
Tu as bien raison RSlow, et c'est pourquoi j'ai présenté le premier calcul. Pour réussir les deux autres, il faut s'y prendre de cette façon:

n& Iif(int(n/v) n/v, n/v, Int(n/v) + 1)

Bon, Iif() est lent. Donc une autre façon est d'utiliser If.. Else.. EndIf.

Je n'ai cependant pas testé la vitesse de l'un par rapport à l'autre.

Personnellement, je préfère -int(-(n/v))... C'est plus clair et très rapide aussi.


MadLucas...
RSlow Messages postés 1 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 23 septembre 2003
23 sept. 2003 à 11:14
Le problème avec les 2 autres méthodes que tu cites, MadLucas, c'est qu'elles ne marchent plus pour les nombres entiers :
-Int(-(8)) 8> OK
Int(8) + 1 9 <> 8> NOK
Fix(8) + 1 9 <> 8> NOK (ne marche ni pour les nombres entiers, ni pour les nombres négatifs...)

Par contre, la formule initiale ("classique" en mathématiques) :
Ceiling(X) = -(Int(-X))
est intéressante par rapport à :
ArrondiEntierSup IIf(X Int(X), X, Int(X)+1)

L'avantage est que cela évite de faire un test, ce qui accélère le traitement, est plus simple à écrire... et permet d'arrondir facilement à l'entier supérieur dans les requêtes SQL lorsque la fonction Ceiling() n'est pas disponible.
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
18 sept. 2003 à 16:02
Bon, effectivement i lpeut y avoir plusieurs façon de faire pour arrondir vers le haut. Voici quelques exemples:

-Int(-(8.4)) = 9
Int(8.4) + 1 = 9
Fix(8.4) + 1 = 9

Ce qui est intéressant, c'est de voir le benchmark du code compilé:

Boucle à 10000000x :

-Int(-(8.4)) = 9 (2140x)
Int(8.4) + 1 = 9 (2132x)
Fix(8.4) + 1 = 9 (2110x)

Donc on peut dire qu'avec le code compilé, on obtient une meilleur performance avec Fix(8.4) + 1 ...

Maintenant, le même Benchmark avec un code non-compilé:

Boucle à 10000000x :

-Int(-(8.4)) = 9 (2585x)
Int(8.4) + 1 = 9 (2504x)
Fix(8.4) + 1 = 9 (2513x)

Ici c'est le Int(8.4) + 1 qui a la meilleur performance.

Mais bon, ce sont des fractions de secondes n'est-ce pas ? Alors ne vous creusez pas trop la tête et utilisez le calcul que vous retiendrez le plus facilement...


MadLucas !
Le benchmark a été fait avec un event à 1 sur le Timer, avec un code compilé.
LogRaam (aka Gabriel Mailhot) Messages postés 60 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 25 avril 2005
18 sept. 2003 à 14:36
En fait, Int et Fix font la même chose, ils renvoient la partie entière d'un nombre; à la différence près que Int renvois l'entier inférieur ou égal et que Fix renvois l'entier supérieur ou égal. Le problème c'est que ça fonctionne seulement avec les nombres négatifs.. Par exemple Fix(-8.4) va donner -8 et Int(-8.4) va donner -9. Cependant Int(8.4) et Fix(8.4) vont tous les deux donner 8.

Le concept que j'ai présenter ci-haut est de justement faire le calcul avec Int dans le négatif et changer le signe en même temps. Donc:
-int(-(8.4)) = 9

MadLucas..
Rrominet Messages postés 133 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 24 novembre 2014 1
18 sept. 2003 à 13:33
Pour info, Fix renvoie la partie entière je crois, donc :
-8.4 --> -8
10.5 --> 10
Rrominet Messages postés 133 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 24 novembre 2014 1
18 sept. 2003 à 13:32
Hmmm pas mal ;)

Ca évite de récupérer la valeur entière, de tester si le nb est décimal et d'ajouter ou non 1 pour arrondir au supérieur :)

Merci bien :)
cs_Nicolux Messages postés 12 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 20 janvier 2004
18 sept. 2003 à 09:40
C'est faux sebmafate !!!
Fix n'arrondi à l'entier supérieur que pour des nombres négatifs.

Aide MSDN :
The difference between Int and Fix is that if number is negative, Int returns the first negative integer less than or equal to number, whereas Fix returns the first negative integer greater than or equal to number. For example, Int converts -8.4 to -9, and Fix converts -8.4 to -8.

Donc 10/10 à MadLucas
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
18 sept. 2003 à 07:23
une chose... oublions un peu les maths et intéressons nous aux fonctions natives de VB. Regardons ensemble la fonction : Fix() et que voyons nous... Oh miracle ! elle arrondi à l'entier supérieur ;)
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
17 sept. 2003 à 23:46
Tu sais que t'es vraiment pas con toi !!!!
T'as droit à un 10/10 !! Pas pour la qualité du codage, car ton code est plutôt "court" mais pour l'idée !!!!
Rejoignez-nous