2010-09-30 16 views
5

¿Cómo puedo verificar si 204/5 es mayor que 200/5? Experimenté dificultad cuando intenté esto, usando matemáticas de punto flotante y decimal.Problemas con la división en C#

+0

(float) 200/(float) 5 <(float) 204/(float) 5 – FFox

Respuesta

5

Al añadir un .0 o un f a cualquier número fuerza el lenguaje para interpretar ese número como un número decimal de coma flotante:

  • 204 es un entero,

  • 204f es una precisión simple decimal en coma flotante y

  • 204.0 es un decimal de coma flotante de doble precisión.

Por lo tanto, 204/5 devuelve un entero 40 y 204.0/5 devuelve un flotador de doble precisión 40.8.

if (204.0/5 > 200.0/5) { 
    // stuff 
} 

O bien, puede tomar la ruta matemáticamente más simple:

if (204 > 200) { 
    // because you're dividing both of them by 5 
} 
+0

CPU no refundición. Simplemente le dice al compilador qué tipo de código general tratar con los números (como enteros, flotantes, dobles, etc.) – siride

+0

@siride - Absolutamente correcto. Editado – amphetamachine

0
if ((204.0/5.0) > (200.0/5.0)) { 
    //do stuff! 
} 
15

Usando flotante o decimal hará el trabajo ... pero lo que necesita para llevar a cabo la aritmética en la flotación señalar haciendo al menos uno de los operandos decimal/flotante/doble:

decimal x = ((decimal) 204)/5; 
decimal y = ((decimal) 200)/5; 

if (x > y) // Yes! 

o el uso de puntos flotantes literales:

decimal x = 204m/5; 
decimal y = 200m/5; 

No importa lo que operando está flotando punto:

decimal x = 204/5m; 
decimal y = 200/5m; 

flotador trabajo/doble igual de bien:

double x = 204d/5; 
double y = 200d/5; 

Entonces, ¿qué sucede si solo usas 204/5? Así, tenga en cuenta esta declaración:

double x = 204/5; 

El compilador no utiliza el tipo de la variable para calcular el tipo de la derecha. Funciona que el lado derecho es solo un entero, obtenido al dividir dos enteros. El resultado se convierte luego en double y se asigna a x. El problema es que la aritmética se hace puramente con enteros mientras que desea que la conversión a punto flotante se realice antes, para que pueda obtener un resultado de coma flotante.

0

La razón es que cuando intenta calcular 204/5, está calculando exactamente int 204 divides int 5, el resultado es también int en C#. Puedes probar 204m/5, obtendrás la respuesta correcta.

0
if (((float)(204)/5) > ((float)(200)/5)) 
{ 
//Enter code here 
} 
else 
{ 
//Enter code here 
}