round net c# .net frameworks bcl

c# - net - ¿Por qué math.Ceiling(double a) no devuelve int directamente?



math.floor c# (1)

Posible duplicado:
¿Por qué no vuelve Math.Round / Floor / Ceiling long o int?

msdn definió este método: devuelve el número entero más pequeño mayor o igual al número de punto flotante de precisión doble especificado.

pero de hecho es

public static double Ceiling ( double a )

¿Por qué no devolver int directamente? ¿En qué piensa microsoft?


Se debe a que el rango de un double (± 5.0 × 10 −324 a ± 1.7 × 10 308 ) es mucho mayor que el rango de un int (-2,147,483,648 a 2,147,483,647). Si el tipo de retorno fuera int muchas entradas posibles fallarían. Por ejemplo, Math.Ceiling podría verse obligado a lanzar una OverflowException en un contexto checked , o incluso podría devolver un resultado incorrecto en un contexto no verificado. Este es un comportamiento indeseable.

Además, este método puede devolver algunos valores especiales como NaN y PositiveInfinity . Esto solo es posible si el tipo de retorno es double .

Si cree que el resultado se ajustará a un int, puede agregar una conversión explícita:

int result = (int)Math.Ceiling(a);