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(...
?
Réponses
Trop de publicités?À 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);
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);