Je dois obtenir la valeur entière du côté gauche d'un nombre décimal ou double. Pour Ex: je dois obtenir la valeur 4 à partir de 4.6. J'ai essayé d'utiliser la fonction Math.Floor, mais il renvoie une valeur double, par exemple: il renvoie 4.0 à partir de 4.6 La documentation MSDN indique qu'elle renvoie une valeur entière. Est-ce que j'ai râté quelque chose? Ou y a-t-il une manière différente de réaliser ce que je cherche?
La plage de double
est beaucoup plus large que celle de int
ou long
. Considérons ce code:
double d = 100000000000000000000d;
long x = Math.Floor(d); // Invalid in reality
Le nombre entier est en dehors de la plage de long
- qu'attendez-vous donc?
En règle générale, vous savez que la valeur en fait sera dans la plage de int
ou long
, de sorte que vous la lancez:
double d = 1000.1234d;
int x = (int) Math.Floor(d);
mais la responsabilité de cette distribution incombe au développeur, pas au Math.Floor
lui-même. Il aurait été inutilement restrictif de le faire échouer avec une exception pour toutes les valeurs hors de la plage long
.
Selon MSDN, Math.Floor (double) renvoie un double: http://msdn.Microsoft.com/en-us/library/e0b5f0xb.aspx
Si vous le voulez comme 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, il s'agit d'un nombre entier), il est toujours de TYPE Double.
Si vous avez juste besoin de la partie entière d'un nombre, transformez-le en une variable int
. Cela tronquera le nombre à la virgule décimale.
double myDouble = 4.6;
int myInteger = (int)myDouble;
Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))
Cela vous donnera la valeur exacte que vous voulez si vous prenez 4.6
, il renvoie 4
en sortie.
C'est correct. En regardant la déclaration, Math.Floor (double) donne un double (voir http://msdn.Microsoft.com/en-us/library/e0b5f0xb.aspx ). Je suppose que par "entier", ils signifient "nombre entier".
Floor le laisse comme un double afin que vous puissiez faire plus de doubles calculs avec elle . Si vous le voulez comme un entier, convertissez le résultat de floor comme un entier . les règles de parole sont différentes (IIRC) pour les nombres négatifs.