COMMENT ARRONDIR UN NOMBRE VERS LE HAUT --> DEUX OPTIONS !
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 2006
-
17 sept. 2003 à 23:46
teststes
Messages postés4Date d'inscriptionmercredi 4 octobre 2006StatutMembreDerniè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.
teststes
Messages postés4Date d'inscriptionmercredi 4 octobre 2006StatutMembreDernière intervention 8 janvier 2007 7 août 2008 à 01:48
merci
cs_MSergio
Messages postés21Date d'inscriptionvendredi 28 janvier 2005StatutMembreDernière intervention26 juin 2007 11 juin 2007 à 09:19
Merci,
C'est vraiment sympa d'y avoir pensé pour microsoft...
manymal
Messages postés66Date d'inscriptionmardi 29 mars 2005StatutMembreDernière intervention20 avril 2006 20 avril 2006 à 14:39
Youpiii...
roundUp = -Int(-(myNum))
c'est les "-" qui me manquai !!!!
MERCI
pavid
Messages postés5Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention27 octobre 2005 29 déc. 2004 à 15:46
Clair, précis, efficace, Bravo
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és171Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention 6 mai 20071 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és60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 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és60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 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és164Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention19 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és60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 avril 2005 13 nov. 2003 à 16:32
Tout le plaisir est pour moi !! Merci à vous tous pour ces bons commentaires.
MadLucas.
lareve
Messages postés2Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention13 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és60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 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és1Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention23 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és60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 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:
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és60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 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és133Date d'inscriptionlundi 26 janvier 2009StatutMembreDernière intervention24 novembre 20141 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és133Date d'inscriptionlundi 26 janvier 2009StatutMembreDernière intervention24 novembre 20141 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és12Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention20 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és4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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és4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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 !!!!
7 août 2008 à 01:48
11 juin 2007 à 09:19
C'est vraiment sympa d'y avoir pensé pour microsoft...
20 avril 2006 à 14:39
roundUp = -Int(-(myNum))
c'est les "-" qui me manquai !!!!
MERCI
29 déc. 2004 à 15:46
19 nov. 2004 à 13:11
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
14 nov. 2004 à 19:36
Bonne prog !!!
@plus
25 oct. 2004 à 17:11
-int(-((10.1234*100)))/100 = 10.13
Bonne journée,
MadLucas
23 oct. 2004 à 00:48
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
22 oct. 2004 à 22:52
comment je fais pour ajouter deux chiffres après la virgule sur la source de madlucas ???
13 nov. 2003 à 16:32
MadLucas.
13 nov. 2003 à 15:04
lareve!
23 sept. 2003 à 15:04
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...
23 sept. 2003 à 11:14
-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.
18 sept. 2003 à 16:02
-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é.
18 sept. 2003 à 14:36
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..
18 sept. 2003 à 13:33
-8.4 --> -8
10.5 --> 10
18 sept. 2003 à 13:32
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 :)
18 sept. 2003 à 09:40
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
18 sept. 2003 à 07:23
17 sept. 2003 à 23:46
T'as droit à un 10/10 !! Pas pour la qualité du codage, car ton code est plutôt "court" mais pour l'idée !!!!