2011-09-22 14 views

Respuesta

43

Es porque el rango de una double (± 5,0 × 10 -324 a ± 1,7 × 10) es mucho mayor que el rango de un int (-2147483648 a 2147483647). Si el tipo de devolución fuera int, fallarían muchas entradas posibles. Por ejemplo, Math.Ceiling podría verse forzado a arrojar un OverflowException en un contexto checked, o incluso podría devolver un resultado incorrecto en un contexto no verificado. Este es un comportamiento indeseable.

También se pueden devolver algunos valores especiales como NaN y PositiveInfinity con este método. Esto solo es posible si el tipo de devolución es double.

Si usted cree que el resultado se ajusta a un int, se puede añadir una conversión explícita:

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

Y, por supuesto, si lo hace una conversión explícita de esa ejemplo, si el valor * no lo hace * ajuste, el tiempo de ejecución arrojará un ajuste (y obtendrá la excepción para tratar). –

+0

Es realmente tonto: los dobles solo pueden almacenar confiablemente ~ 7-8 figuras significativas de todos modos, por lo que no podrías redondear nada superior a '2147483648'. –

+1

@ ChrisBurt-Brown: un 'doble' puede contener cada múltiplo de la mitad hasta 2^52, que es considerablemente más grande que el rango de 2^31 de' Int32' (pero más pequeño que el rango de 2^63 de ' Int64'). – supercat

Cuestiones relacionadas