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
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
È perché il / operator sta eseguendo una divisione integer se entrambi gli operandi sono interi. Si potrebbe fare questo:
float ans = (i/3.0f);
è 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;
che sta facendo la divisione intera perché i
è un int
e 3
è un int
. Prova questo:
float ans = ((float)i/3.0f);
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.
Molto semplice: in C#, int/int = int.
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
))
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.
Bonus +1 per il collegamento alla pagina MSDN appropriata. –
Mille grazie per questo - ma perché "f" rende il numero diverso? –
@ 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