round examples ejemplos decimals c# math

c# - examples - ¿Por qué Math.Round no devuelve un int?



round c# decimal (3)

Esta pregunta ya tiene una respuesta aquí:

En C #, ¿por qué no las funciones de redondeo de matemáticas Floor, Ceiling y Round devuelven int ? Teniendo en cuenta que el resultado de la función siempre será un número entero, ¿por qué devuelve un float , double o decimal ?


Considerando que el resultado de la función siempre será un número entero,

No, no lo será. Incluso puede especificar la cantidad de dígitos con Math.Round Method (Double, Int32)

tipo de dígitos:
System.Int32
El número de dígitos fraccionarios en el valor de retorno.


Esto se hace para incluir números más grandes que los incluidos en el rango de un int. Así que Math.Floor devolverá un doble que se puede convertir a int o long en función del tamaño y el desarrollador. Si probó Math.Floor fuera del rango de int, habría fallado si Math.Floor hubiera devuelto un int, pero no lo hace, devuelve un doble que puede convertir a largo.

double d = 4147483647.5678; long a = (long)Math.Floor(d); int b = (int)Math.Floor(d); Console.WriteLine(a); Console.WriteLine(b);

Tenga en cuenta que al convertir a int, b se empujó nuevamente a MIN int, ya que int no puede acomodarlo.


double tiene el rango de ± 5.0 × 10 -324 a ± 1.7 × 10 308 y long tiene el rango de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 . Lamentablemente, no todos los valores de punto flotante integral se pueden representar mediante un número entero.

Por ejemplo, 1e19 ya ha excedido el rango de un entero con signo de 64 bits.

(long)Math.Round(1e19) == -9223372036854775808L // WTF?

Si bien es cierto que las sobrecargas de argumento único Math.Round(double) y Math.Round(decimal) siempre devolverán un valor integral, estas sobrecargas aún no pueden devolver un tipo de valor entero.

Si sabe que el valor pasado a la función devolverá un valor representable por un tipo de valor entero, puede moldearlo usted mismo. La biblioteca no hará eso porque necesita considerar el caso general.