2011-01-03 17 views
5

debo estar haciendo algo tonto:simple división

float ans = (i/3); 

Así que por qué cuando se i = 7 ans saliendo a 2,0?

i es un int

Respuesta

11

Es porque el / operator está realizando una división entera si ambos operandos son enteros. Usted puede hacer esto:

float ans = (i/3.0f); 
+1

Bonificación +1 para vincular a la página MSDN correspondiente. –

+0

Muchas gracias por eso, pero ¿por qué "f" hace que el número sea diferente? –

+2

@ m.edmondson: los sufijos numéricos son indicios para el compilador de que un número literal debe tratarse como un tipo determinado. Es una abreviatura de '(float) 3.0' – Tony

6

usted necesita para hacer uno de los operandos de un flotador, de lo contrario el cálculo se realiza con números enteros primera (que siempre resulta en un número entero), antes de convertir el resultado a un flotador.

float ans = ((float) i)/3; 
0

que está haciendo la división entera, porque es un iint y 3 es un int. Prueba esto:

float ans = ((float)i/3.0f); 
0

uso float ans = (i/3.0) o float ans = (i/3f) o float ans = ((float)i/3). / hace una división entera si ambos lados son de tipo entero.

0

Muy simple: en C#, int/int = int.

0

Lo que estamos buscando es:

float ans = ((float)i/3); 

De lo contrario usted está tomando dos números enteros y dividirlos para encontrar el número de veces que todo el divisor va en el dividendo. (Como se mencionó, int/int = int independientemente del tipo de destino. Y, para el compilador, "3" es otro entero (a menos que lo especifique como 3.0f))

0

Supongo que tiene esto en lazo de algún tipo. Podría especificar su variable i como un flotante en su lugar.

for (float i = 0; i < 10; i++) 
{ 
    float ans = (i/3); 
    // statements 
} 

Solo otra solución.