2010-11-09 18 views
16

Duplicar posibles:
Why does Math.Floor(Double) return a value of type Double?¿Por qué C# Math.floor() devolver el doble en lugar de Int

¿Por qué C# Math.Floor() retorno double en lugar de int

Desde el MSDN Documentos:

Devuelve el mayor enteros menor o igual a la especificada con precisión doble número de coma flotante

que dice que devuelve un entero. Está bien devolver un double, siempre puedo convertirlo en un int, pero es bastante extraño, ¿no?

+1

Está mal redactado. Podría decirse que debería decir "número entero" (u otra cosa, incluso en las notas) para evitar la ambigüedad con los tipos de datos * int * eger. Sin embargo, [entero] (http://en.wikipedia.org/wiki/Integer) es un término matemático, entonces, aunque confunde aquí, es técnicamente correcto. –

Respuesta

38

No realmente, teniendo en cuenta que un double puede ser una magnitud mucho mayor que un int. No desearía desbordar un int con el gran valor que podría tener un doble.

sólo para mostrar lo que quiero decir:

Double.MaxValue = 1.7976931348623157E + 308

Integer.MaxValue = 2147483647

Por lo que podría tener un doble que es 3,000,000,000.50 y el suelo que, que desbordaría el valor máximo de un int.

+3

Esa es una buena explicación de por qué tiene sentido ... aunque la explicación de por qué es así es mucho más simple: el resultado de la FPU es un 'doble'. Dado que muchas veces quieres usarlo como un "doble" (tal vez restarlo del argumento, para obtener la parte fraccionaria), no tendría sentido convertirlo y luego tener que convertirlo de nuevo. –

+1

@Ben Voigt: también es un buen punto, pero no explica por qué el valor devuelto NO podría ser del tipo Integer ya que la documentación casi sugiere sugerir. El hecho de que la FPU genere algo no significa que un método deba devolver ese resultado, especialmente en un entorno de tiempo de ejecución no nativo. La documentación de MSDN probablemente debería haber usado la frase "parte integral" o algo así para evitar confusiones con el nombre del tipo. – userx

+2

si era una cosa de tamaño, seguramente podrían devolver un largo/Int64? – mike

3

Debido a que el ENTRADA es un doble, el SALIDA también debe haber un doble, o una gran cantidad de producto potencial no puedan integrarse en la variable de salida.

En términos matemáticos, el dominio y la gama de la función debe tener el mismo tamaño.

Cuestiones relacionadas