solo mostrar entera decimales c# math int divide

mostrar - division entera c#



¿Por qué funciona Decimal.Divide(int, int), pero no(int/int)? (7)

¿Cómo es que dividir dos números int de 32 bits como (int / int) me devuelve 0 , pero si uso Decimal.Divide() obtengo la respuesta correcta? De ninguna manera soy un hombre.


Creo que Decimal.Divide(decimal, decimal) convierte implícitamente sus 2 argumentos int a decimales antes de devolver un valor decimal (preciso) donde 4/5 se trata como división entera y devuelve 0


En el primer caso, está haciendo una división entera, por lo que el resultado se trunca (la parte decimal se corta) y se devuelve un número entero.

En el segundo caso, las entradas se convierten a decimales primero, y el resultado es un decimal. Por lo tanto, no están truncados y obtienes el resultado correcto.


La respuesta marcada como tal está muy cerca, pero creo que vale la pena agregar que hay una diferencia entre usar el doble y el decimal.

No haría un mejor trabajo explicando los conceptos que Wikipedia, así que solo proporcionaré los indicadores:

aritmética de coma flotante

tipo de datos decimales

En los sistemas financieros, a menudo es un requisito que podamos garantizar una cierta cantidad de precisión de decimales (base-10). Esto es generalmente imposible si los datos de entrada / fuente están en base-10, pero realizamos la aritmética en base-2 (porque el número de decimales requerido para la expansión decimal de un número depende de la base; un tercio lleva infinitamente muchos decimales) lugares para expresar en base-10 como 0.333333 ..., pero solo requiere un decimal en base-3: 0.1).

Los números de punto flotante son más rápidos para trabajar (en términos de tiempo de CPU, en cuanto a programación, son igualmente simples) y se prefieren siempre que se desee minimizar el error de redondeo (como en las aplicaciones científicas).


La siguiente línea:

int a = 1, b = 2; object result = a / b;

... se realizará usando aritmética de enteros . Decimal.Divide por otro lado toma dos parámetros del tipo Decimal , por lo que la división se realizará en valores decimales en lugar de enteros. Eso es equivalente a esto:

int a = 1, b = 2; object result = (Decimal)a / (Decimal)b;

Para examinar esto, puede agregar las siguientes líneas de código después de cada uno de los ejemplos anteriores:

Console.WriteLine(result.ToString()); Console.WriteLine(result.GetType().ToString());

La salida en el primer caso será

0 System.Int32

..y en el segundo caso:

0,5 System.Decimal


Quieres lanzar los números:

doble c = (doble) a / (doble) b;

Nota: Si alguno de los argumentos en C # es un doble, se usa una doble división que da como resultado un doble. Entonces, lo siguiente también funcionaría:

doble c = (doble) a / b;

aquí hay un pequeño programa:

static void Main(string[] args) { int a=0, b = 0, c = 0; int n = Convert.ToInt16(Console.ReadLine()); string[] arr_temp = Console.ReadLine().Split('' ''); int[] arr = Array.ConvertAll(arr_temp, Int32.Parse); foreach (int i in arr) { if (i > 0) a++; else if (i < 0) b++; else c++; } Console.WriteLine("{0}", (double)a / n); Console.WriteLine("{0}", (double)b / n); Console.WriteLine("{0}", (double)c / n); Console.ReadKey(); }


Si está buscando 0 <a <1 respuesta, int / int no será suficiente. int / int hace división entera. Intenta convertir uno de los int a un doble dentro de la operación.


int es un tipo entero; dividir dos ints realiza una división entera , es decir, la parte fraccionaria se trunca ya que no se puede almacenar en el tipo de resultado (¡también int !). Decimal , por el contrario, tiene una parte fraccionaria. Al invocar Decimal.Divide , sus argumentos int se convierten implícitamente en Decimal s.

Puede imponer la división no entera en argumentos int al int explícitamente al menos uno de los argumentos en un tipo de coma flotante, por ejemplo:

int a = 42; int b = 23; double result = (double)a / b;