53 votes

comment convertir le résultat Math.Ceiling en entier ?

Math.Ceiling renvoie double car double peut stocker des nombres beaucoup plus grands. Cependant, si je suis sûr que le type int est capable de stocker le résultat, comment dois-je convertir ? Est-il sûr de lancer (int) Math.Ceiling(... ?

65voto

Øyvind Bråthen Points 25211

Si vous êtes sûr de ne pas dépasser la capacité de int, il devrait être parfaitement sûr de le faire

 int myInt = (int)Math.Ceiling(...);

Si vous n'êtes pas sûr de la limite, vous pouvez utiliser long au lieu de int .

17voto

À partir des pratiques C++, j'utiliserais ce qui suit. Il est garanti d'obtenir le résultat correct même lorsque le plafond renvoie 99,99999...8 ou 100 000000...1

 var result = (int)(Math.Ceiling(value) + 0.5);

Le code ci-dessous devrait également fonctionner si vous faites confiance à sa mise en œuvre

 var result = Convert.ToInt32(value);

13voto

Todd Points 2386

Si tout est une question de vitesse, alors Math.Ceiling pour les entrées et sorties Int est assez lent. La plus rapide est une expression en ligne :

 var ceilingResult = (value / divisor) + (value % divisor == 0 ? 0 : 1);

D'après mon propre benchmark de 10 millions d'itérations, Math.Ceiling prend environ 2,4 secondes. Appeler cette expression à l'intérieur d'une fonction nommée prend environ 380 ms et l'avoir en tant qu'expression directe en ligne prend environ 33 ms.

Si vous souhaitez Math.Floor pour les entrées et sorties Int, c'est encore plus simple :

 var floorResult = (value / divisor);

5voto

Fredrik Johansson Points 1982

j'irais avec

 int x = (int)Math.Ceiling(0.9); // 1

3voto

Mharlin Points 1446

Si vous n'êtes pas sûr, vous pouvez toujours mettre une instruction if et vérifier si le nombre que vous obtenez est supérieur à int.MaxValue

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X