J'ai besoin d'obtenir la valeur entière de gauche à partir d'une valeur décimale ou double. Par exemple : je dois obtenir la valeur 4 à partir de 4.6. J'ai essayé d'utiliser la fonction Math.Floor mais elle renvoie une valeur double, par exemple : elle renvoie 4.0 à partir de 4.6. La documentation MSDN indique qu'elle renvoie une valeur entière. Est-ce que quelque chose m'échappe ? Ou existe-t-il un autre moyen d'obtenir ce que je cherche ?
Réponses
Trop de publicités?La gamme de double
est beaucoup plus large que la gamme de int
ou long
. Considérez ce code :
double d = 100000000000000000000d;
long x = Math.Floor(d); // Invalid in reality
Le nombre entier est en dehors de la plage de long
- Alors, que voulez-vous qu'il se passe ?
En général, vous savez que la valeur en fait être dans la fourchette de int
ou long
alors vous le lancez :
double d = 1000.1234d;
int x = (int) Math.Floor(d);
mais la responsabilité de cette distribution incombe au développeur, et non à Math.Floor
lui-même. Il aurait été inutilement restrictif de le faire échouer avec une exception pour toutes les valeurs en dehors de l'intervalle de long
.
Selon MSDN, Math.Floor(double) renvoie un double : http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx
Si vous voulez que ce soit un int :
int result = (int)Math.Floor(yourVariable);
Je peux voir comment l'article de MSDN peut être trompeur, ils auraient dû spécifier que même si le résultat est un "entier" (dans ce cas, cela signifie un nombre entier), il est toujours de TYPE Double.
C'est exact. Si l'on regarde la déclaration, Math.Floor(double) donne un double (cf. http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx ). Je suppose que par "entier", ils entendent "nombre entier".
Floor le laisse sous forme de double pour que vous puissiez effectuer d'autres calculs doubles avec lui. Si vous le voulez sous forme de nombre entier, transformez le résultat de floor en nombre entier. Ne transformez pas le double original en int car les règles de floor sont différentes (IIRC) pour les nombres négatifs.
- Réponses précédentes
- Plus de réponses