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);