2011-01-03 14 views
5

io devo fare qualcosa di stupido:semplice divisione

float ans = (i/3); 

Allora perché, quando si i = 7 ans venendo fuori a 2.0?

i è un int

risposta

11

È perché il / operator sta eseguendo una divisione integer se entrambi gli operandi sono interi. Si potrebbe fare questo:

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

Bonus +1 per il collegamento alla pagina MSDN appropriata. –

+0

Mille grazie per questo - ma perché "f" rende il numero diverso? –

+2

@ m.edmondson: i suffissi numerici sono suggerimenti per il compilatore che un numero letterale deve essere trattato come un determinato tipo. È una scorciatoia per '(float) 3.0' – Tony

6

è necessario effettuare una delle operandi un galleggiante, altrimenti il ​​calcolo è fatto con numeri interi prima (che si traduce sempre in un intero), prima di convertire il risultato a un galleggiante.

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

che sta facendo la divisione intera perché i è un int e 3 è un int. Prova questo:

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

uso float ans = (i/3.0) o float ans = (i/3f) o float ans = ((float)i/3). / esegue una divisione intera se entrambi i lati sono di tipo intero.

0

Molto semplice: in C#, int/int = int.

0

Quello che stai cercando è:

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

In caso contrario si sta prendendo due interi e dividendoli per trovare il numero di volte in tutto il divisore va in al dividendo. (Come accennato, un int/int = int indipendentemente dal tipo di destinazione e, per il compilatore, "3" è un altro intero (a meno che non lo specifichi come 3.0f))

0

Suppongo che tu abbia questo in un ciclo di qualche tipo. Puoi invece specificare la tua variabile i come float.

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

Solo un'altra soluzione.