2011-01-03 12 views

Odpowiedz

11

To dlatego, że / operator wykonuje się podział liczby całkowitej, jeśli oba argumenty są liczbami całkowitymi. Można to zrobić:

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

Bonus +1 za połączenie z odpowiednią stroną MSDN. –

+0

Wielkie dzięki za to - ale dlaczego "f" sprawia, że ​​numer jest inny? –

+2

@ m.edmondson: sufiksy liczbowe są podpowiedziami kompilatora, że ​​literalna liczba powinna być traktowana jako określony typ. Jest skrótem dla '(float) 3.0' – Tony

6

Musisz zrobić jeden z argumentów pływaka, inaczej obliczanie odbywa się z całkowitymi pierwszy (co zawsze skutkuje liczby całkowitej), przed zamianą wyniku na pływaka.

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

Robi podział całkowitej ponieważ i jest int i 3 jest int. Spróbuj tego:

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

użycie float ans = (i/3.0) lub float ans = (i/3f) lub float ans = ((float)i/3). / robi podział całkowity, jeśli obie strony są typu całkowitego.

0

Bardzo proste: w języku C#, int/int = int.

0

Czego szukasz:

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

Inaczej bierzesz dwie liczby całkowite i dzieląc je znaleźć liczbę całych czasach dzielnik idzie do dywidendy. (Jak wspomniano, int/int = int bez względu na typ miejsca docelowego, a do kompilatora "3" jest inną liczbą całkowitą (chyba, że ​​określono ją jako 3.0f))

0

Zakładam, że masz to w pętla jakiegoś rodzaju. Zamiast tego możesz określić zmienną i jako zmienną float.

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

To kolejne rozwiązanie.