muszę robić coś głupiego:Prosty podział
float ans = (i/3);
Więc dlaczego kiedy i = 7
jest ans wychodzi na 2.0?
i
jest int
muszę robić coś głupiego:Prosty podział
float ans = (i/3);
Więc dlaczego kiedy i = 7
jest ans wychodzi na 2.0?
i
jest int
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);
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;
Robi podział całkowitej ponieważ i
jest int
i 3
jest int
. Spróbuj tego:
float ans = ((float)i/3.0f);
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.
Bardzo proste: w języku C#, int/int = int.
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
))
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.
Bonus +1 za połączenie z odpowiednią stroną MSDN. –
Wielkie dzięki za to - ale dlaczego "f" sprawia, że numer jest inny? –
@ 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