OVH Cloud OVH Cloud

arondir un nombre

6 réponses
Avatar
SODELEM
Bonjour,
Existe t-il unr methode permettant d'arrondir un entier
5,99 --> 6
Ou suis je obliger de faire le traitement moi meme.
Cordialement

6 réponses

Avatar
Ambassadeur Kosh
Math.Floor et Math.Ceiling
et pour le reste, Math egallement

Bonjour,
Existe t-il unr methode permettant d'arrondir un entier
5,99 --> 6
Ou suis je obliger de faire le traitement moi meme.
Cordialement


Avatar
SODELEM
Cette methode mepermet de donner l entier superieur.
Si je desire avoir des nombres derieres la vrigule comme 5,359--> 5,36
comment puis je determiner les nombres derieres la virugles
Cordialement


"Ambassadeur Kosh" a écrit dans le message de
news: #QVpP$
Math.Floor et Math.Ceiling
et pour le reste, Math egallement

> Bonjour,
> Existe t-il unr methode permettant d'arrondir un entier
> 5,99 --> 6
> Ou suis je obliger de faire le traitement moi meme.
> Cordialement





Avatar
Ambassadeur Kosh
je vois.

travaillons à 2 chiffres derriere la virgule par exemple

double x = 5.369434687 ;
double y = x * 100. ;
// du coup, y vaut 536.9434687
// et donc, on applique la methode d'avant pour "couper"
double z = Math.Floor(y) ;
// z vaut 536, reste à redecaler
double result = z / 100. ;
// et voila result vaut 5.36

pour l'arrondi superieur, c'est du meme gout avec Ceil.
et pour l'arrondi au plus proche, je pourais vous amener le decalage de 1/2
mais Math.Round fait déja trés bien le boulot.

comme ces fonctions. ne sont pas directement dans Math. on va les creer.

class RoundMath
{
// precision est le nb de chiffres auquel on bosse. nb negatif positif
ou nul, tout marche.
public static double Floor(double x,double precision)
{
double a = Math.Pow(10,precision) ;
return Math.Floor(a*x)/a ;
}

// precision est le nb de chiffres auquel on bosse. nb negatif positif
ou nul, tout marche.
public static double Ceiling(double x,double precision)
{
double a = Math.Pow(10,precision) ;
return Math.Celing(a*x)/a ;
}

// precision est le nb de chiffres auquel on bosse.
public static double Round(double x,double precision)
{
return Math.Round(x,precision) ;
}
}

voila voila...
Avatar
Antoine F.
Il n'y a pas une Math.Round(valeur, nb de chiffres après virgule) ???? C'est pourtant
assez standard comme appel dans une multitude de langages....

.antoine
Avatar
Ambassadeur Kosh
> Il n'y a pas une Math.Round(valeur, nb de chiffres après virgule) ????


C'est pourtant
assez standard comme appel dans une multitude de langages....



ben si. mais il n'y a "rien" pour la troncature inf ou sup. cad pas de
Math.Foor(valeur, nb de chiffres après virgule) ni de Math.Ceiling(valeur,
nb de chiffres après virgule). seulement Math.Floor(valeur) et
Math.Ceiling(valeur). comme en lisant 5.999 -> 6 on ne deduit pas forcement
que c'est Round qu'il faut, j'ai essayé de donner une réponse un peu
générale.

voila voila
Avatar
Vincent Lascaux
> double x = 5.369434687 ;
double y = x * 100. ;
// du coup, y vaut 536.9434687
// et donc, on applique la methode d'avant pour "couper"
double z = Math.Floor(y) ;
// z vaut 536, reste à redecaler
double result = z / 100. ;
// et voila result vaut 5.36



Comme on travaille avec des doubles, on ne doit pas se soucier du fait que
result peut en fait valoir 5.3599999 ou 5.3600000001 (par exemple).
Si on voulait (juste une hypothese) avoir la maitrise des décimales pour
(par exemple) faire du traitement d'argent, il faudrait utiliser des entiers
et parler en centimes (ou en millieme d'euros, ou en millionieme selon la
précision désirée).

--
Vincent